From ec6c4dc9b0e75f5c2e24d0fc9e47ab91b38ff023 Mon Sep 17 00:00:00 2001 From: Brenley Dueck Date: Sun, 20 Sep 2026 08:10:04 -0500 Subject: [PATCH] fix(vitest): resolve each inline project's own config under Vitest 5 Vitest 5 defaults test.sharedViteServer to true, so inline projects reuse the root Vite server and never run the plugin's config hook. They lost the per-project posture, the jest-dom setup file and the server.deps handling. The plugin now sets sharedViteServer to false when the root config declares test.projects and the user has not set the option. Fixes #369 --- .changeset/vitest-5-shared-server-projects.md | 5 +++++ README.md | 2 ++ src/index.ts | 5 +++++ 3 files changed, 12 insertions(+) create mode 100644 .changeset/vitest-5-shared-server-projects.md diff --git a/.changeset/vitest-5-shared-server-projects.md b/.changeset/vitest-5-shared-server-projects.md new file mode 100644 index 0000000..62889bb --- /dev/null +++ b/.changeset/vitest-5-shared-server-projects.md @@ -0,0 +1,5 @@ +--- +'@solidjs/vite-plugin': patch +--- + +Vitest 5 inline projects get the plugin's test configuration again (#369). Vitest 5 defaults `test.sharedViteServer` to `true`, so an inline project that only changes `test` options reuses the root Vite server and resolves its options from the raw root `test` block, without running the plugin's `config` hook. Such projects lost everything the hook injects: a `test.environment: 'node'` project kept the root's `browser` condition (`isServer` was `false`), and jsdom projects lost the `@testing-library/jest-dom` setup file and the `solid-js` `server.deps` handling. When the root config declares `test.projects` and leaves `test.sharedViteServer` unset, the plugin now sets it to `false` so every project resolves its own Vite config, as it did under Vitest 4. An explicit `sharedViteServer` value is respected. diff --git a/README.md b/README.md index 68b757c..41c5034 100644 --- a/README.md +++ b/README.md @@ -1045,6 +1045,8 @@ test: { }, ``` +The posture is chosen while each project resolves its own Vite config. Vitest 5 lets inline projects reuse the root Vite server instead (`test.sharedViteServer`, on by default), which skips that step, so the plugin sets `sharedViteServer: false` when the root config declares `test.projects`. Setting the option yourself overrides this; with `true`, every shared project runs with the root config's posture and without the injected `jest-dom` setup file. + # Credits - [solid-js](https://github.com/solidjs/solid) diff --git a/src/index.ts b/src/index.ts index f4d6687..f522ec2 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1192,6 +1192,11 @@ export default function solidPlugin(options: Partial = {}): Plugin[] { test.environment = 'jsdom'; } + // Vitest 5 inline projects reuse the root server and never run this hook (#369). + if (userTest.projects && userTest.sharedViteServer === undefined) { + test.sharedViteServer = false; + } + if (serverTestPosture) { // The worker pool is shared across the whole vitest workspace and // imports externalized deps natively with `--conditions` derived