@@ -44,7 +44,11 @@ export default defineConfig({
4444
4545## API
4646
47- Webcontainer utilities are exposed as [ test fixtures] ( https://vitest.dev/guide/test-context.html#test-extend ) .
47+ Webcontainer utilities are exposed as [ test fixtures] ( https://vitest.dev/guide/test-context.html#test-extend ) :
48+
49+ - [ ` preview ` ] ( #preview )
50+ - [ ` webcontainer ` ] ( #webcontainer )
51+ - [ ` setup ` ] ( #setup )
4852
4953``` ts
5054import { test } from " @webcontainer/test" ;
@@ -70,7 +74,7 @@ import { test, type TestContext } from "@webcontainer/test";
7074import { beforeEach } from " vitest" ;
7175
7276// Mount project before each test
73- beforeEach <TextContext >(({ webcontainer }) => {
77+ beforeEach <TestContext >(({ webcontainer }) => {
7478 await webcontainer .mount (" projects/example" );
7579});
7680```
@@ -214,5 +218,34 @@ WebContainer's [`rm`](https://webcontainers.io/guides/working-with-the-file-syst
214218await webcontainer .rm (" /node_modules" );
215219```
216220
221+ ### ` setup `
222+
223+ If you have repetitive steps that are needed by multiple test cases, you can improve test performance by using ` setup ` .
224+
225+ It calls the given function once, saves WebContainer state in a snapshot, and restores that snapshot before each test.
226+
227+ ``` ts
228+ import { test , type TestContext } from " @webcontainer/test" ;
229+ import { beforeEach , expect , onTestFinished } from " vitest" ;
230+
231+ beforeEach <TestContext >(async ({ webcontainer , setup }) => {
232+ // This is run once and cached for each next run
233+ await setup (async () => {
234+ await webcontainer .mount (" ./svelte-project" );
235+ await webcontainer .runCommand (" npm" , [" install" ]);
236+ });
237+ });
238+
239+ // No need to re-mount file system or re-run install in test cases
240+ test (" user can build project" , async ({ webcontainer }) => {
241+ await webcontainer .runCommand (" npm" , [" run" , " build" ]);
242+ });
243+
244+ test (" user can start project" , async ({ webcontainer , preview }) => {
245+ void webcontainer .runCommand (" npm" , [" run" , " dev" ]);
246+ await preview .getByRole (" heading" , { name: " Welcome to SvelteKit" });
247+ });
248+ ```
249+
217250[ version-badge ] : https://img.shields.io/npm/v/@webcontainer/test
218251[ npm-url ] : https://www.npmjs.com/package/@webcontainer/test
0 commit comments