Skip to content

Commit a093bac

Browse files
committed
Add the afterEach hook
1 parent 877a297 commit a093bac

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
@@ -261,6 +261,10 @@ export type BeforeEach<TRenderer extends Renderer = Renderer, TArgs = Args> = (
261261
context: StoryContext<TRenderer, TArgs>
262262
) => Awaitable<CleanupCallback | void>;
263263

264+
export type AfterEach<TRenderer extends Renderer = Renderer, TArgs = Args> = (
265+
context: StoryContext<TRenderer, TArgs>
266+
) => Awaitable<void>;
267+
264268
export interface Canvas {}
265269

266270
export interface StoryContext<TRenderer extends Renderer = Renderer, TArgs = Args>
@@ -379,6 +383,17 @@ export interface BaseAnnotations<TRenderer extends Renderer = Renderer, TArgs =
379383
*/
380384
beforeEach?: BeforeEach<TRenderer, TArgs>[] | BeforeEach<TRenderer, TArgs>;
381385

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

0 commit comments

Comments
 (0)