@amiceli/vitest-cucumber
Version:
vitest tools to use Gherkin feature in unit tests
68 lines (67 loc) • 2.81 kB
TypeScript
import type { TaskContext } from 'vitest';
import type { Example } from '../parser/models/scenario';
export type MaybePromise<T = void> = T | Promise<T>;
export type CallbackWithSingleContext = (context: TaskContext) => MaybePromise;
export type CallbackWithParamsAndContext<T = any> = (ctx: TaskContext, ...params: T[]) => MaybePromise;
export type StepCallbackDefinition = (name: string, fn: CallbackWithSingleContext | CallbackWithParamsAndContext) => void;
export type StepTest<T = any> = {
Given: StepCallbackDefinition;
When: StepCallbackDefinition;
But: StepCallbackDefinition;
And: StepCallbackDefinition;
Then: StepCallbackDefinition;
context: T;
};
export type DefineStepsHandler = (callback: (defineStepsOptions: {
Given: StepCallbackDefinition;
When: StepCallbackDefinition;
Then: StepCallbackDefinition;
And: StepCallbackDefinition;
But: StepCallbackDefinition;
}) => void) => void;
export type FeatureDescriibeCallbackParams<T = any> = {
Background: BackgroundTest & {
skip: BackgroundTest;
};
Scenario: ScenarioTest & {
skip: ScenarioTest;
only: ScenarioTest;
};
ScenarioOutline: ScenarioOutlineTest & {
skip: ScenarioOutlineTest;
only: ScenarioOutlineTest;
};
BeforeAllScenarios: (fn: () => MaybePromise) => void;
AfterAllScenarios: (fn: () => MaybePromise) => void;
BeforeEachScenario: (fn: () => MaybePromise) => void;
AfterEachScenario: (fn: () => MaybePromise) => void;
Rule: RuleTest & {
skip: RuleTest;
only: RuleTest;
};
/** should be called before Scenario, Rule, ScenarioOutline or Background */
defineSteps: DefineStepsHandler;
context: T;
};
export type DescribeFeatureCallback = (scenarioCallback: FeatureDescriibeCallbackParams) => void;
export type RuleOptions<T = any> = {
RuleBackground: BackgroundTest & {
skip: BackgroundTest;
};
RuleScenario: ScenarioTest & {
skip: ScenarioTest;
only: ScenarioTest;
};
RuleScenarioOutline: ScenarioOutlineTest & {
skip: ScenarioOutlineTest;
only: ScenarioOutlineTest;
};
/** should be called before RuleScenario, RuleScenarioOutline or RuleBackground */
defineSteps: DefineStepsHandler;
context: T;
};
export type RuleTest = (ruleName: string, fn: (options: RuleOptions) => void) => void;
export type ScenarioTest = (scenarioDescription: string, fn: (options: StepTest) => MaybePromise) => void;
export type ScenarioOutlineTest = (scenarioDescription: string, fn: (options: StepTest, examples: Example[0]) => MaybePromise) => void;
export type BackgroundStepTest = Pick<StepTest, 'Given' | 'And' | 'context'>;
export type BackgroundTest = (fn: (options: BackgroundStepTest) => MaybePromise) => void;