From 836ddfae19bae765893275e631167b301587d194 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Tue, 6 Oct 2026 15:13:29 +0900 Subject: [PATCH] test(ui): fix playwright trace source locations (#11508) Co-authored-by: Hiroshi Ogawa <4232207+hi-ogawa@users.noreply.github.com> Co-authored-by: Claude Opus 5.5 --- test/ui/test/helper.ts | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/test/ui/test/helper.ts b/test/ui/test/helper.ts index 8f283b773..e09aa8ffb 100644 --- a/test/ui/test/helper.ts +++ b/test/ui/test/helper.ts @@ -9,10 +9,25 @@ import { expect } from '@playwright/test' import { preview } from 'vite' import { startVitest } from 'vitest/node' +// Vitest's main-process module runner (globalSetup, reporters, etc.) replaces +// Error.prepareStackTrace on startup, which breaks Playwright's source-mapped +// locations of test steps in traces. Restoring it only loses source maps for +// errors from those main-process modules, which these tests don't rely on. +async function preserveStackTrace(fn: () => Promise): Promise { + const prepareStackTrace = Error.prepareStackTrace + try { + return await fn() + } finally { + Error.prepareStackTrace = prepareStackTrace + } +} + export async function startVitestSimple(cliOptions: CliOptions): Promise { const stdout = new Writable({ write: (_, __, callback) => callback() }) const stderr = new Writable({ write: (_, __, callback) => callback() }) - const vitest = await startVitest(undefined, cliOptions, {}, { stdout, stderr }) + const vitest = await preserveStackTrace(() => + startVitest(undefined, cliOptions, {}, { stdout, stderr }), + ) await vitest.close() return vitest } @@ -24,7 +39,9 @@ export async function startVitestUi( // silence Vitest logs const stdout = new Writable({ write: (_, __, callback) => callback() }) const stderr = new Writable({ write: (_, __, callback) => callback() }) - const vitest = await startVitest(undefined, cliOptions, viteOverrides, { stdout, stderr }) + const vitest = await preserveStackTrace(() => + startVitest(undefined, cliOptions, viteOverrides, { stdout, stderr }), + ) const address = vitest.vite.httpServer?.address() assert(address && typeof address === 'object', 'Invalid server address') @@ -44,7 +61,7 @@ export async function startHtmlReportPreview( ): Promise<{ previewServer: PreviewServer; url: string }> { const stdout = new Writable({ write: (_, __, callback) => callback() }) const stderr = new Writable({ write: (_, __, callback) => callback() }) - await startVitest('test', undefined, cliOptions, {}, { stdout, stderr }) + await preserveStackTrace(() => startVitest('test', undefined, cliOptions, {}, { stdout, stderr })) const previewServer = await preview(previewOptions) const address = previewServer.httpServer?.address() -- 2.51.2