
Security News
Node.js Considers Public Workflow for Security Reports Amid AI-Driven Surge
Node.js is debating whether AI-driven security report volume warrants moving more vulnerability reports into public workflows.
executable-stories-jest
Advanced tools
BDD-style executable stories for Jest with documentation generation. Uses Jest's native describe / it; step markers and optional callbacks register scenario metadata for the reporter.
pnpm add -D executable-stories-jest executable-stories-formatters
Call story.init() at the start of any test that should appear in generated docs.
import { expect, it } from '@jest/globals';
import { story } from 'executable-stories-jest';
it('adds two numbers', () => {
story.init();
story.given('two numbers 5 and 3');
const a = 5;
const b = 3;
story.when('I add them together');
const result = a + b;
story.then('the result is 8');
expect(result).toBe(8);
});
Top-level step helpers are also exported for compatibility:
import { given, story, then, when } from 'executable-stories-jest';
it('logs in', () => {
story.init();
given('a registered user');
when('valid credentials are submitted');
then('the dashboard is shown');
});
You can use steps in two ways (and mix them in the same test).
Step text documents intent; the implementation lives on the following lines (as in the examples above).
Pass a function as the second argument to given / when / then / and / but. The step is recorded, then the function runs. If it returns a Promise, that promise is returned so you can await story.when('...', async () => { ... }).
it('adds two numbers', async () => {
story.init();
story.given('two numbers 5 and 3', () => {
a = 5;
b = 3;
});
const result = await story.when('I add them together', async () => a + b);
story.then('the result is 8', () => {
expect(result).toBe(8);
});
});
Add the reporter and the setup file to your Jest config.
export default {
// REQUIRED: without this the reporter receives no data and produces empty output.
setupFilesAfterEnv: ['executable-stories-jest/setup'],
reporters: [
'default',
[
'executable-stories-jest/reporter',
{
formats: ['markdown', 'html'],
outputDir: 'docs',
outputName: 'user-stories',
},
],
],
};
setupFilesAfterEnv: ['executable-stories-jest/setup'] is required: it registers an afterAll hook that flushes recorded stories to disk for the reporter to read. Without it, the reporter gets no data and generates empty output.
Options match FormatterOptions from executable-stories-formatters. Optional rawRunPath writes raw run JSON for use with the executable-stories CLI.
Pass options to story.init(options):
story.init({
tags: ['smoke', 'auth'],
ticket: 'AUTH-123',
meta: { owner: 'platform' },
});
Supported options: tags, ticket, covers, meta, traceUrlTemplate.
| Option | Description |
|---|---|
tags | String array for categorization and filtering (e.g. ['smoke', 'auth']). |
ticket | Ticket/issue ID(s) for traceability (e.g. 'AUTH-123'). |
covers | Product-code paths/globs this scenario exercises (project-root-relative), for coverage/traceability (e.g. ['src/auth/**']). |
meta | Arbitrary key-value metadata. |
traceUrlTemplate | URL template for OTel trace links; use {traceId} placeholder. Can also be set via OTEL_TRACE_URL_TEMPLATE. |
story.init() plus story.given, story.when, story.then, story.and, story.but. Top-level step helpers are also exported.story.init() inside the Jest test() or it() callback. Scenario title comes from the Jest test title.story.note(), story.json(), story.code(), story.table(), story.mermaid(), and related doc methods.story, top-level step helpers, and types. Reporter lives at executable-stories-jest/reporter; the required setup file lives at executable-stories-jest/setup.FAQs
BDD-style executable stories for Jest with documentation generation
The npm package executable-stories-jest receives a total of 817 weekly downloads. As such, executable-stories-jest popularity was classified as not popular.
We found that executable-stories-jest demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
Node.js is debating whether AI-driven security report volume warrants moving more vulnerability reports into public workflows.

Security News
PolinRider expands across npm, Packagist, Go modules, and Chrome extensions, using hidden loaders to target developer environments.

Security News
Open source attacks are accelerating as AI coding agents pull in dependencies faster, with less human review.