UNPKG

@amiceli/vitest-cucumber

Version:

vitest tools to use Gherkin feature in unit tests

53 lines (52 loc) 2.11 kB
import { MissingScenarioOutlineVariableValueError, ScenarioOulineWithoutExamplesError, ScenarioOutlineVariableNotCalledInStepsError, ScenarioOutlineVariablesDeclaredWithoutExamplesError, } from '../../errors/errors'; import { ScenarioOutline } from '../../parser/models/scenario'; export class ScenarioStateDetector { scenario; constructor(scenario) { this.scenario = scenario; } static forScenario(scenario) { return new ScenarioStateDetector(scenario); } checkIfScenarioHasNoExample() { const { examples } = this.scenario; if (examples.length === 0) { throw new ScenarioOulineWithoutExamplesError(this.scenario); } } detectMissingVariableInSteps() { const { examples } = this.scenario; const examplesKeys = Object.keys(examples[0]); const missingVariable = examplesKeys.find((v) => { return (this.scenario.steps .map((s) => s.details) .join(``) .includes(`<${v}>`) === false); }); if (missingVariable) { throw new ScenarioOutlineVariableNotCalledInStepsError(this.scenario, missingVariable); } } detectMissingVariableValue() { const { examples } = this.scenario; const examplesKeys = Object.keys(examples[0]); const missingVariable = examplesKeys.find((v) => { return (examples.filter((values) => { return values[v] === undefined || values[v] === null; }).length > 0); }); if (missingVariable) { throw new MissingScenarioOutlineVariableValueError(this.scenario, missingVariable); } } checkExemples() { if (this.scenario instanceof ScenarioOutline) { if (this.scenario.missingExamplesKeyword) { throw new ScenarioOutlineVariablesDeclaredWithoutExamplesError(this.scenario); } this.checkIfScenarioHasNoExample(); this.detectMissingVariableInSteps(); this.detectMissingVariableValue(); } } }