38 lines
1.2 KiB
JavaScript

const log = require("debug")("cypress:cucumber");
const path = require("path");
const { Parser } = require("gherkin");
const jsStringEscape = require("js-string-escape");
const { getStepDefinitionsPaths } = require("./getStepDefinitionsPaths");
const { cucumberTemplate } = require("./cucumberTemplate");
const { getCucumberJsonConfig } = require("./getCucumberJsonConfig");
// This is the template for the file that we will send back to cypress instead of the text of a
// feature file
const createCucumber = (filePath, cucumberJson, spec, toRequire, name) =>
`
${cucumberTemplate}
window.cucumberJson = ${JSON.stringify(cucumberJson)};
describe(\`${name}\`, function() {
${toRequire.join("\n")}
createTestsFromFeature('${filePath}', '${jsStringEscape(spec)}');
});
`;
// eslint-disable-next-line func-names
module.exports = function (spec, filePath = this.resourcePath) {
log("compiling", spec);
const stepDefinitionsToRequire = getStepDefinitionsPaths(filePath).map(
(sdPath) => `require('${sdPath}')`
);
const { name } = new Parser().parse(spec.toString()).feature;
return createCucumber(
path.basename(filePath),
getCucumberJsonConfig(),
spec,
stepDefinitionsToRequire,
name
);
};