From 6c7a8e860d91c425e82b9f2e0887857b90c709ca Mon Sep 17 00:00:00 2001 From: Vladimir Sheremet Date: Fri, 5 Sep 2025 14:35:29 +0800 Subject: [PATCH 1/3] fix: process sourcemaps for stack traces from `globalSetup` files --- packages/utils/src/source-map.ts | 4 +++- packages/vitest/src/node/environments/serverRunner.ts | 1 - packages/vitest/src/node/project.ts | 2 +- .../global-setup-fail/globalSetup/{error.js => error.ts} | 4 ++++ test/cli/fixtures/global-setup-fail/vitest.config.ts | 2 +- test/cli/test/global-setup-fail.test.ts | 2 ++ 6 files changed, 11 insertions(+), 4 deletions(-) rename test/cli/fixtures/global-setup-fail/globalSetup/{error.js => error.ts} (58%) diff --git a/packages/utils/src/source-map.ts b/packages/utils/src/source-map.ts index 52baddbc7ed6..3f98c89db7bb 100644 --- a/packages/utils/src/source-map.ts +++ b/packages/utils/src/source-map.ts @@ -178,7 +178,9 @@ export function parseSingleV8Stack(raw: string): ParsedStack | null { : resolve(file) if (method) { - method = method.replace(/__vite_ssr_import_\d+__\./g, '') + method = method + .replace(/__vite_ssr_import_\d+__\./g, '') + .replace(/(Object\.)?__vite_ssr_export_default__\s?/g, '') } return { diff --git a/packages/vitest/src/node/environments/serverRunner.ts b/packages/vitest/src/node/environments/serverRunner.ts index 7dd8278ab48b..896f0b5990c3 100644 --- a/packages/vitest/src/node/environments/serverRunner.ts +++ b/packages/vitest/src/node/environments/serverRunner.ts @@ -19,7 +19,6 @@ export class ServerModuleRunner extends ModuleRunner { super( { hmr: false, - sourcemapInterceptor: 'node', transport: { async invoke(event) { if (event.type !== 'custom') { diff --git a/packages/vitest/src/node/project.ts b/packages/vitest/src/node/project.ts index 22e61bad661f..a9054e0fee4d 100644 --- a/packages/vitest/src/node/project.ts +++ b/packages/vitest/src/node/project.ts @@ -511,7 +511,7 @@ export class TestProject { this.browser?.close(), this.clearTmpDir(), ].filter(Boolean), - ).then(() => { + ).then(() => this.runner.close()).then(() => { this._provided = {} as any this._vite = undefined }) diff --git a/test/cli/fixtures/global-setup-fail/globalSetup/error.js b/test/cli/fixtures/global-setup-fail/globalSetup/error.ts similarity index 58% rename from test/cli/fixtures/global-setup-fail/globalSetup/error.js rename to test/cli/fixtures/global-setup-fail/globalSetup/error.ts index cd07c86ea49c..4680726623e2 100644 --- a/test/cli/fixtures/global-setup-fail/globalSetup/error.js +++ b/test/cli/fixtures/global-setup-fail/globalSetup/error.ts @@ -1,3 +1,7 @@ +interface _Test { + method: () => void +} + export default function () { throw new Error('error') } diff --git a/test/cli/fixtures/global-setup-fail/vitest.config.ts b/test/cli/fixtures/global-setup-fail/vitest.config.ts index 703b1e39c299..5705e8757411 100644 --- a/test/cli/fixtures/global-setup-fail/vitest.config.ts +++ b/test/cli/fixtures/global-setup-fail/vitest.config.ts @@ -5,7 +5,7 @@ export default defineConfig({ test: { globals: true, globalSetup: [ - resolve(import.meta.dirname, './globalSetup/error.js'), + resolve(import.meta.dirname, './globalSetup/error.ts'), ], }, }) diff --git a/test/cli/test/global-setup-fail.test.ts b/test/cli/test/global-setup-fail.test.ts index 13225f0c4caa..94afa18844bc 100644 --- a/test/cli/test/global-setup-fail.test.ts +++ b/test/cli/test/global-setup-fail.test.ts @@ -14,4 +14,6 @@ it('should fail', async () => { .find(i => i.includes('Error: ')) ?.trim() expect(msg).toBe('Error: error') + expect(stderr).not.toContain('__vite_ssr_export_default__') + expect(stderr).toContain('globalSetup/error.ts:6:9') }, 50000) From a196fad36382980e3d1b92c416c7f8f47b8bf602 Mon Sep 17 00:00:00 2001 From: Vladimir Sheremet Date: Fri, 5 Sep 2025 15:03:04 +0800 Subject: [PATCH 2/3] fix: don't close if already closed --- packages/vitest/src/node/project.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/vitest/src/node/project.ts b/packages/vitest/src/node/project.ts index a9054e0fee4d..b68864d6e8f5 100644 --- a/packages/vitest/src/node/project.ts +++ b/packages/vitest/src/node/project.ts @@ -511,7 +511,11 @@ export class TestProject { this.browser?.close(), this.clearTmpDir(), ].filter(Boolean), - ).then(() => this.runner.close()).then(() => { + ).then(() => { + if (!this.runner.isClosed()) { + return this.runner.close() + } + }).then(() => { this._provided = {} as any this._vite = undefined }) From d2e9785d4ac82cca766215da7ca12428e81370b6 Mon Sep 17 00:00:00 2001 From: Vladimir Sheremet Date: Fri, 5 Sep 2025 15:03:58 +0800 Subject: [PATCH 3/3] test: fix broken test --- test/coverage-test/test/run-dynamic-coverage.test.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/test/coverage-test/test/run-dynamic-coverage.test.ts b/test/coverage-test/test/run-dynamic-coverage.test.ts index aa30366f1ef6..7415494bfd03 100644 --- a/test/coverage-test/test/run-dynamic-coverage.test.ts +++ b/test/coverage-test/test/run-dynamic-coverage.test.ts @@ -7,6 +7,7 @@ test('enableCoverage() collects coverage after being called', async () => { // Run a minimal suite where coverage starts disabled, then enable it and rerun. const { ctx } = await runVitest({ include: ['fixtures/test/math.test.ts'], + watch: true, coverage: { // start disabled and turn on dynamically enabled: false, @@ -28,6 +29,7 @@ test('enableCoverage() collects coverage after being called', async () => { test('disableCoverage() stops collecting coverage going forward', async () => { const { ctx } = await runVitest({ include: ['fixtures/test/math.test.ts'], + watch: true, coverage: { enabled: true, reporter: 'json',