@autometa/cucumber-runner v0.11.9
Introduction
Autometa Cucumber Runner is a wrapper for multiple established
test runners like jest and vitest that enables support for testing .feature
files.
Features
- Utilize you or your teams favorite testing framework with Cucumber
- Steps are defined globally and scenarios are self assembling
- Steps can be overridden for specific features or scenarios with edge behavior
- Per-Scenario dependency injection of tester-defined classes.
- Cucumber expressions
- Extensive handling of data tables
- CommonJs and ESM compatible
Install
npm add -D @autometa/cucumber-runner
yarn add -D @autometa/cucumber-runner
pnpm add -D @autometa/cucumber-runner
Quick Start
Configure
To begin, add *.feature.ts
as a test file pattern to your
test library config if needed. Also, add autometa.config.ts
to the setup files option
import { defineConfig } from 'vitest/config'
defineConfig({
...
setupFiles: ['autometa.config.ts']
include: ['**/*.{test,spec,feature}.{js,mjs,cjs,ts,mts,cts,jsx,tsx}']
...
})
export default {
...
setupFilesAfterEnv: ['autometa.config.ts']
testMatch: ['**/?(*.)+(spec|test|feature).[jt]s?(x)']
...
}
Next, create the autometa.config.ts
. To use globally available
step files, add a globals
option, and provide the test functions
of your test framework. It's also a good idea to import reflect-metadata
from this file. reflect-metadata
is a required dependency of this library.
import "reflect-metadata";
import { defineConfig } from "@autometa/cucumber-runner";
import { describe, test, beforeEach, beforeAll, afterEach, afterAll } from "vitest";
defineConfig({
globals: "globals",
runner: {
name: "vitest",
describe,
test,
beforeEach,
beforeAll,
afterEach,
afterAll,
},
});
import "reflect-metadata";
import { defineConfig } from "@autometa/cucumber-runner";
defineConfig({
globals: "globals",
runner: {
name: "jest",
describe,
test,
beforeEach,
beforeAll,
afterEach,
afterAll,
},
});
Use
Feature: A User Can Log In
Background: Set up a new User
Given a new registered User
| username | name | age | password |
| johnny5 | John | 45 | paS5091! |
Scenario: A User logs in with valid credentials
When they log in
| username | password |
| johnny5 | paS5091! |
Then they see their profile
Scenario: A User logs in with a bad password
When they log in
| username | password |
| johnny5 | oops |
Then they are informed their password is incorrect
import { Given, When, Then, Feature, Before, Scenario } from "@autometa/cucumber-runner";
import { App } from "../src/app";
Before("Launch browser", async ({ world, myDriver }) => {
world.page = await myDriver.start(process.env.API_URL);
});
Given("a new registered User", async (data: HTable, { world, httpClient }: App) => {
const userDetails = data.json(0);
await httpClient.createUser(userDetails);
});
When("they log in", async (userDetails: HTable, { world: { page } }: App) => {
const { username, password } = userDetails.json(0);
await page.logUserIn(username, password);
});
Then("they see their profile", async ({ world: { page } }: App) => {
await page.verifyProfileOpen();
});
Then(
"they are informed their {word} is incorrect",
async (field: string, { world: { page } }: App) => {
await page.verifyBadLoginField(field);
}
);
Feature("../features/my-feature.feature");
// override Steps
Feature(() => {
Given("a new registered User", async (data: HTable, { world: { page } }: App) => {
const userDetails = data.json(0);
await page.gotoRegistration();
await page.registerWith(userDetails);
});
Scenario("A User logs in with a bad password", () => {
Then("they are informed their password is incorrect", async ({ world: { page } }: App) => {
await page.verifyBadPassword();
});
});
}, "../features/my-feature.feature");
// load multiple feature files
Feature("../features/my-feature.feature", "../features/my-other-feature.feature");
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
4 months ago
6 months ago
6 months ago
8 months ago
9 months ago
7 months ago
10 months ago
7 months ago
10 months ago
9 months ago
7 months ago
9 months ago
7 months ago
6 months ago
7 months ago
7 months ago
8 months ago
7 months ago
10 months ago
7 months ago
11 months ago
11 months ago
10 months ago
11 months ago
11 months ago
12 months ago
12 months ago
11 months ago
12 months ago
12 months ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago