diff --git a/packages/vitest/src/node/plugins/workspace.ts b/packages/vitest/src/node/plugins/workspace.ts index dbfecb5e2049..3338ab253787 100644 --- a/packages/vitest/src/node/plugins/workspace.ts +++ b/packages/vitest/src/node/plugins/workspace.ts @@ -245,6 +245,7 @@ export function WorkspaceVitestPlugin( }, { name: 'vitest:project:server', + enforce: 'pre', async configureServer(server) { const options = deepMerge({}, configDefaults, server.config.test || {}) await project._configureServer(options, server) diff --git a/test/cli/fixtures/ssr-runner-project/project/basic.test.ts b/test/cli/fixtures/ssr-runner-project/project/basic.test.ts new file mode 100644 index 000000000000..eab3194ea0f8 --- /dev/null +++ b/test/cli/fixtures/ssr-runner-project/project/basic.test.ts @@ -0,0 +1,5 @@ +import { test, expect } from 'vitest' + +test('basic', () => { + expect(1 + 1).toBe(2) +}) diff --git a/test/cli/fixtures/ssr-runner-project/project/test-runner.js b/test/cli/fixtures/ssr-runner-project/project/test-runner.js new file mode 100644 index 000000000000..149c784f0017 --- /dev/null +++ b/test/cli/fixtures/ssr-runner-project/project/test-runner.js @@ -0,0 +1,2 @@ +import * as vite from 'vite' +export default vite diff --git a/test/cli/fixtures/ssr-runner-project/project/vitest.config.ts b/test/cli/fixtures/ssr-runner-project/project/vitest.config.ts new file mode 100644 index 000000000000..0a87e213c395 --- /dev/null +++ b/test/cli/fixtures/ssr-runner-project/project/vitest.config.ts @@ -0,0 +1,21 @@ +import assert from 'node:assert' +import { isRunnableDevEnvironment, createServer } from 'vite' +import { defineConfig } from 'vitest/config' + +export default defineConfig({ + plugins: [ + { + name: 'test-ssr-runner', + // test ssr runner.import() with correct external semantics in configureServer hook + // vite should be externalized and reference-equal to the directly imported one + async configureServer(server) { + const ssr = server.environments.ssr + if (isRunnableDevEnvironment(ssr)) { + const m = await ssr.runner.import<{ default: typeof import("vite") }>('./test-runner.js') + assert(m.default.createServer === createServer) + ;(globalThis as any).__testSsrRunnerProject = m.default.version + } + }, + }, + ], +}) diff --git a/test/cli/fixtures/ssr-runner-project/vitest.config.ts b/test/cli/fixtures/ssr-runner-project/vitest.config.ts new file mode 100644 index 000000000000..0e54531bf948 --- /dev/null +++ b/test/cli/fixtures/ssr-runner-project/vitest.config.ts @@ -0,0 +1,7 @@ +import { defineConfig } from "vitest/config"; + +export default defineConfig({ + test: { + projects: ["project"], + }, +}); diff --git a/test/cli/test/ssr-runner.test.ts b/test/cli/test/ssr-runner.test.ts index 1bdc814b137a..cfd71b554dde 100644 --- a/test/cli/test/ssr-runner.test.ts +++ b/test/cli/test/ssr-runner.test.ts @@ -4,6 +4,13 @@ import { runVitest } from '../../test-utils' // https://github.com/vitest-dev/vitest/issues/9324 it('ssr runner.import() works in configureServer', async () => { - await runVitest({ root: './fixtures/ssr-runner' }) + const { stderr } = await runVitest({ root: './fixtures/ssr-runner' }) + expect(stderr).toBe('') expect((globalThis as any).__testSsrRunner).toBe(version) }) + +it('works in project', async () => { + const { stderr } = await runVitest({ root: './fixtures/ssr-runner-project' }) + expect(stderr).toBe('') + expect((globalThis as any).__testSsrRunnerProject).toBe(version) +})