Skip to content

Commit 4d1d54a

Browse files
committed
Add the afterEach hook
1 parent 18dbdbe commit 4d1d54a

File tree

2 files changed

+23
-0
lines changed

2 files changed

+23
-0
lines changed

src/story.test.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,8 @@ async function doSomething() {
3939
a = 2;
4040
}
4141

42+
async function validateSomething() {}
43+
4244
async function cleanup() {
4345
a = 1;
4446
}
@@ -55,6 +57,9 @@ const simple: XMeta = {
5557
await doSomething();
5658
return cleanup;
5759
},
60+
async afterEach() {
61+
await validateSomething();
62+
},
5863
args: { x: '1' },
5964
argTypes: { x: { type: { name: 'string' } } },
6065
};
@@ -71,6 +76,9 @@ const strict: XMeta<ButtonArgs> = {
7176
await doSomething();
7277
return cleanup;
7378
},
79+
async afterEach() {
80+
await validateSomething();
81+
},
7482
argTypes: { x: { type: { name: 'string' } } },
7583
};
7684

src/story.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -263,6 +263,10 @@ export type BeforeEach<TRenderer extends Renderer = Renderer, TArgs = Args> = (
263263
context: StoryContext<TRenderer, TArgs>
264264
) => Awaitable<CleanupCallback | void>;
265265

266+
export type AfterEach<TRenderer extends Renderer = Renderer, TArgs = Args> = (
267+
context: StoryContext<TRenderer, TArgs>
268+
) => Awaitable<void>;
269+
266270
export interface Canvas {}
267271

268272
export interface StoryContext<TRenderer extends Renderer = Renderer, TArgs = Args>
@@ -381,6 +385,17 @@ export interface BaseAnnotations<TRenderer extends Renderer = Renderer, TArgs =
381385
*/
382386
beforeEach?: BeforeEach<TRenderer, TArgs>[] | BeforeEach<TRenderer, TArgs>;
383387

388+
/**
389+
* Function to be called after each play function for post-test assertions.
390+
* Don't use this function for cleaning up state.
391+
* You can use the return callback of `beforeEach` for that, which is run when switching stories.
392+
* When the function is async, it will be awaited.
393+
*
394+
* `afterEach` can be added to preview, the default export and to a specific story.
395+
* They are run (and awaited) reverse order: preview, default export, story
396+
*/
397+
afterEach?: AfterEach<TRenderer, TArgs>[] | BeforeEach<TRenderer, TArgs>;
398+
384399
/**
385400
* Define a custom render function for the story(ies). If not passed, a default render function by the renderer will be used.
386401
*/

0 commit comments

Comments
 (0)