Vitest Plugin
vitest-cucumber is a framework built on top of Vitest. It wraps Vitest’s lifecycle methods (describe, test, beforeAll, etc.) behind Gherkin keywords, so your test structure mirrors the feature file.
| Vitest | vitest-cucumber | When to use |
|---|---|---|
describe | describeFeature / Scenario / Rule | Grouping tests — driven by your .feature file |
test | Given / When / Then / And / But | Individual assertions — each step is a test |
beforeAll | BeforeAllScenarios | One-time setup before all scenarii |
beforeEach | BeforeEachScenario / Background | Per-scenario setup |
afterEach | AfterEachScenario | Per-scenario teardown |
afterAll | AfterAllScenarios | One-time teardown after all scenarii |
Vitest plugin
Section titled “Vitest plugin”Since 4.1.1 vitest-cucumber provides a Vitest plugin to automatically create and update .spec.ts files when .feature files change.
This plugin is optional — it does not change how vitest-cucumber runs tests.
Note: currently this plugin doesn’t work with vitest browser mode.
Use plugin
Section titled “Use plugin”Add plugin in your vitest.config.js:
import { defineConfig } from "vitest/config"
import { VitestCucumberPlugin } from "@amiceli/vitest-cucumber"
export default defineConfig({
// ...
plugins: [
VitestCucumberPlugin({
specFilesDir: 'src/__tests__/',
featureFilesDir : 'src/features/',
})
],
// ...
})
Now when you run vitest, vitest-cucumber will watch your .feature file in src/features.
By example, if your create src/features/user-auth.feature, vitest-cucumber will create
src/__tests__/user-auth.spec.ts file like npx @amiceli/vitest-cucumber does.
Update spec file
Section titled “Update spec file”When your .feature file change, vitest-cucumber updates spec file.
By example your .feature file
Feature: User
Scenario: User login page
Given User on login page
You spec file:
describeFeature(feature, ({ Scenario }) => {
Scenario(`User login page`, ({ Given }) => {
Given(`User on login page`, () => {})
})
})
If you add a new step like When I click on "login" button, vitest-cucumber
add new step in your spec file :
describeFeature(feature, ({ Scenario }) => {
Scenario(`User login page`, ({ Given, When }) => {
Given(`User on login page`, () => {})
When(`I click on "login" button`, () => {})
})
})
Features
Section titled “Features”vitest-cucumber-plugin what your changes in .feature file:
- add / remove
Scenario,ScenarioOutline,BackgroundfromRuleandFeature - add / remove step(s) from
Scenario,ScenarioOutlineandBackground - update arrow functions arguments, by example :
- removes
Andfrom{ Given, When, And}if you remove last ScenarioAndstep - add
Backgorundin{ Scenario }if you add aBackgroundin yourRule/Feature
- removes
vitest-cucumber-plugin will match steo even if you use step expression.
By example When('I click on {string} button', () => {}) match with When I click on "login" button.
To check and update code vitest-cucumber-plugin uses ts-moprh ❤️.
Configuration
Section titled “Configuration”vitest-cucumber-plugin provides some options:
formatCommand(optional): will run a command to format spec file after update- by example :
npx biome check --write - plugin will pass spec file pass to your command
- by example :
onDeleteAction(optional) : define how to handle remove code from.feature filedelete(default value): plugin will remove code in your spec filecommentplugin will comment code in your spec file
Example:
// When(`I click on "login" button`, () => {
// console.debug('login')
// })