From ea998ec794ca588d16970ae32e2070ca2ab28852 Mon Sep 17 00:00:00 2001 From: jycouet Date: Fri, 31 Oct 2025 00:03:19 +0100 Subject: [PATCH 1/2] feat(vitest): update to vitest `4.0` --- .changeset/fifty-boats-double.md | 8 ++++++++ packages/addons/vitest-addon/index.ts | 29 +++++++++------------------ 2 files changed, 18 insertions(+), 19 deletions(-) create mode 100644 .changeset/fifty-boats-double.md diff --git a/.changeset/fifty-boats-double.md b/.changeset/fifty-boats-double.md new file mode 100644 index 000000000..c8606b4a0 --- /dev/null +++ b/.changeset/fifty-boats-double.md @@ -0,0 +1,8 @@ +--- +'sv': patch +--- + +feat(vitest): update to vitest `4.0` + + - removing `@vitest/browser` in favor of `@vitest/browser-playwright` + - run browser tests in headless mode diff --git a/packages/addons/vitest-addon/index.ts b/packages/addons/vitest-addon/index.ts index a352ecac7..e963de423 100644 --- a/packages/addons/vitest-addon/index.ts +++ b/packages/addons/vitest-addon/index.ts @@ -1,5 +1,5 @@ import { dedent, defineAddon, defineAddonOptions } from '@sveltejs/cli-core'; -import { array, imports, object, vite } from '@sveltejs/cli-core/js'; +import { array, imports, object, functions, vite } from '@sveltejs/cli-core/js'; import { parseJson, parseScript } from '@sveltejs/cli-core/parsers'; const options = defineAddonOptions() @@ -25,11 +25,11 @@ export default defineAddon({ const unitTesting = options.usages.includes('unit'); const componentTesting = options.usages.includes('component'); - sv.devDependency('vitest', '^3.2.4'); + sv.devDependency('vitest', '^4.0.5'); if (componentTesting) { - sv.devDependency('@vitest/browser', '^3.2.4'); - sv.devDependency('vitest-browser-svelte', '^1.1.0'); + sv.devDependency('@vitest/browser-playwright', '^4.0.5'); + sv.devDependency('vitest-browser-svelte', '^2.0.1'); sv.devDependency('playwright', '^1.56.1'); } @@ -71,7 +71,7 @@ export default defineAddon({ if (content) return content; return dedent` - import { page } from '@vitest/browser/context'; + import { page } from 'vitest/browser'; import { describe, expect, it } from 'vitest'; import { render } from 'vitest-browser-svelte'; ${kit ? "import Page from './+page.svelte';" : "import App from './App.svelte';"} @@ -86,15 +86,6 @@ export default defineAddon({ }); `; }); - - sv.file(`vitest-setup-client.${ext}`, (content) => { - if (content) return content; - - return dedent` - /// - /// - `; - }); } sv.file(files.viteConfig, (content) => { @@ -104,15 +95,13 @@ export default defineAddon({ extends: `./${files.viteConfig}`, test: { name: 'client', - environment: 'browser', browser: { enabled: true, - provider: 'playwright', - instances: [{ browser: 'chromium' }] + provider: functions.createCall({ name: 'playwright', args: [] }), + instances: [{ browser: 'chromium', headless: true }] }, include: ['src/**/*.svelte.{test,spec}.{js,ts}'], - exclude: ['src/lib/server/**'], - setupFiles: [`./vitest-setup-client.${ext}`] + exclude: ['src/lib/server/**'] } }); @@ -146,6 +135,8 @@ export default defineAddon({ if (unitTesting) array.append(workspaceArray, serverObjectExpression); // Manage imports + if (componentTesting) + imports.addNamed(ast, { imports: ['playwright'], from: '@vitest/browser-playwright' }); const importName = 'defineConfig'; const { statement, alias } = imports.find(ast, { name: importName, from: 'vite' }); if (statement) { From d9025e933882dc8e091d0ab187a2d36ede12c1cd Mon Sep 17 00:00:00 2001 From: jycouet Date: Thu, 6 Nov 2025 20:00:05 +0100 Subject: [PATCH 2/2] fix changeset tab/space --- .changeset/fifty-boats-double.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.changeset/fifty-boats-double.md b/.changeset/fifty-boats-double.md index c8606b4a0..b2584b6b1 100644 --- a/.changeset/fifty-boats-double.md +++ b/.changeset/fifty-boats-double.md @@ -4,5 +4,5 @@ feat(vitest): update to vitest `4.0` - - removing `@vitest/browser` in favor of `@vitest/browser-playwright` - - run browser tests in headless mode +- removing `@vitest/browser` in favor of `@vitest/browser-playwright` +- run browser tests in headless mode