49 lines
1.8 KiB
JavaScript
49 lines
1.8 KiB
JavaScript
const { CucumberDataCollector } = require("./cukejson/cucumberDataCollector");
|
|
const { createTestFromScenarios } = require("./createTestFromScenario");
|
|
const { shouldProceedCurrentStep, getEnvTags } = require("./tagsHelper");
|
|
|
|
const createTestsFromFeature = (filePath, spec) => {
|
|
const testState = new CucumberDataCollector(filePath, spec);
|
|
const featureTags = testState.feature.tags;
|
|
const hasEnvTags = !!getEnvTags();
|
|
const anyFocused =
|
|
testState.feature.children.filter(
|
|
(section) => section.tags && section.tags.find((t) => t.name === "@focus")
|
|
).length > 0;
|
|
const backgroundSection = testState.feature.children.find(
|
|
(section) => section.type === "Background"
|
|
);
|
|
const allScenarios = testState.feature.children.filter(
|
|
(section) => section.type !== "Background"
|
|
);
|
|
|
|
// tags on features should be inherited by scenario's (https://cucumber.io/docs/cucumber/api/#tags)
|
|
allScenarios.forEach((section) => {
|
|
// eslint-disable-next-line no-param-reassign
|
|
section.tags = section.tags.concat(featureTags);
|
|
});
|
|
|
|
const scenariosToRun = allScenarios.filter((section) => {
|
|
let shouldRun;
|
|
// only just run focused if no env tags set
|
|
// https://github.com/TheBrainFamily/cypress-cucumber-example#smart-tagging
|
|
if (!hasEnvTags && anyFocused) {
|
|
shouldRun = section.tags.find((t) => t.name === "@focus");
|
|
} else {
|
|
shouldRun = !hasEnvTags || shouldProceedCurrentStep(section.tags);
|
|
}
|
|
return shouldRun;
|
|
});
|
|
// create tests for all the scenarios
|
|
// but flag only the ones that should be run
|
|
scenariosToRun.forEach((section) => {
|
|
// eslint-disable-next-line no-param-reassign
|
|
section.shouldRun = true;
|
|
});
|
|
createTestFromScenarios(allScenarios, backgroundSection, testState);
|
|
};
|
|
|
|
module.exports = {
|
|
createTestsFromFeature,
|
|
};
|