@amiceli/vitest-cucumber
Version:
vitest tools to use Gherkin feature in unit tests
59 lines (58 loc) • 2.19 kB
JavaScript
import { ExpressionStep } from '../../parser/expression/ExpressionStep';
import { Step, } from '../../parser/models';
export function defineSharedStep(type, name, scenarioStepCallback) {
const foundStep = new Step(type, name);
const params = ExpressionStep.matchStep(foundStep, name);
return {
key: foundStep.getTitle(),
fn: scenarioStepCallback,
step: foundStep,
params: [
...params,
foundStep.dataTables.length > 0 ? foundStep.dataTables : null,
foundStep.docStrings,
].filter((p) => p !== null),
};
}
export function defineStepToTest(options) {
const { parent, stepDetails, stepType, scenarioStepCallback } = options;
const foundStep = parent.checkIfStepExists(stepType, stepDetails);
const params = ExpressionStep.matchStep(foundStep, stepDetails);
foundStep.isCalled = true;
return {
key: foundStep.getTitle(),
fn: scenarioStepCallback,
step: foundStep,
params: [
...params,
foundStep.dataTables.length > 0 ? foundStep.dataTables : null,
foundStep.docStrings,
].filter((p) => p !== null),
};
}
export function updatePredefinedStepsAccordingLevel(steps) {
const finallySteps = steps.rulePredefinedSteps;
finallySteps.push(...steps.featurePredefinedSteps.filter((featureStep) => {
return (finallySteps.find((s) => {
return (s.step.type === featureStep.step.type &&
s.step.details === featureStep.step.details);
}) === undefined);
}));
finallySteps.push(...steps.globallyPredefinedSteps.filter((globalStep) => {
return (finallySteps.find((s) => {
return (s.step.type === globalStep.step.type &&
s.step.details === globalStep.step.details);
}) === undefined);
}));
return finallySteps;
}
export function orderStepsToRun(parent, steps) {
const orderedSteps = [];
for (const step of parent.steps) {
const defineStep = steps.find((s) => s.step.matchStep(step));
if (defineStep) {
orderedSteps.push(defineStep);
}
}
return orderedSteps;
}