diff --git a/packages/playwright-test/src/index.ts b/packages/playwright-test/src/index.ts index f53478f261810..b1a5e2e077ce0 100644 --- a/packages/playwright-test/src/index.ts +++ b/packages/playwright-test/src/index.ts @@ -239,7 +239,7 @@ const playwrightFixtures: Fixtures = ({ _snapshotSuffix: [process.platform, { scope: 'worker' }], - _setupContextOptionsAndArtifacts: [async ({ playwright, _snapshotSuffix, _combinedContextOptions, _artifactsDir, trace, screenshot, actionTimeout, navigationTimeout, testIdAttribute }, use, testInfo) => { + _setupContextOptionsAndArtifacts: [async ({ playwright, _contextReuseMode, _snapshotSuffix, _combinedContextOptions, _artifactsDir, trace, screenshot, actionTimeout, navigationTimeout, testIdAttribute }, use, testInfo) => { if (testIdAttribute) playwrightLibrary.selectors.setTestIdAttribute(testIdAttribute); testInfo.snapshotSuffix = _snapshotSuffix; @@ -251,7 +251,7 @@ const playwrightFixtures: Fixtures = ({ const traceMode = normalizeTraceMode(trace); const defaultTraceOptions = { screenshots: true, snapshots: true, sources: true }; const traceOptions = typeof trace === 'string' ? defaultTraceOptions : { ...defaultTraceOptions, ...trace, mode: undefined }; - const captureTrace = shouldCaptureTrace(traceMode, testInfo); + const captureTrace = shouldCaptureTrace(traceMode, testInfo) && !process.env.PW_TEST_DISABLE_TRACING; const temporaryTraceFiles: string[] = []; const temporaryScreenshots: string[] = []; const testInfoImpl = testInfo as TestInfoImpl; @@ -603,7 +603,7 @@ type ParsedStackTrace = { apiName: string; }; -export function normalizeVideoMode(video: VideoMode | 'retry-with-video' | { mode: VideoMode } | undefined): VideoMode { +function normalizeVideoMode(video: VideoMode | 'retry-with-video' | { mode: VideoMode } | undefined): VideoMode { if (!video) return 'off'; let videoMode = typeof video === 'string' ? video : video.mode; @@ -616,7 +616,7 @@ function shouldCaptureVideo(videoMode: VideoMode, testInfo: TestInfo) { return (videoMode === 'on' || videoMode === 'retain-on-failure' || (videoMode === 'on-first-retry' && testInfo.retry === 1)); } -export function normalizeTraceMode(trace: TraceMode | 'retry-with-trace' | { mode: TraceMode } | undefined): TraceMode { +function normalizeTraceMode(trace: TraceMode | 'retry-with-trace' | { mode: TraceMode } | undefined): TraceMode { if (!trace) return 'off'; let traceMode = typeof trace === 'string' ? trace : trace.mode; diff --git a/tests/playwright-test/playwright.trace.spec.ts b/tests/playwright-test/playwright.trace.spec.ts index a6adee127cc9c..b5412353e82d1 100644 --- a/tests/playwright-test/playwright.trace.spec.ts +++ b/tests/playwright-test/playwright.trace.spec.ts @@ -286,3 +286,21 @@ test('should respect --trace', async ({ runInlineTest }, testInfo) => { expect(result.passed).toBe(1); expect(fs.existsSync(testInfo.outputPath('test-results', 'a-test-1', 'trace.zip'))).toBeTruthy(); }); + +test('should respect PW_TEST_DISABLE_TRACING', async ({ runInlineTest }, testInfo) => { + const result = await runInlineTest({ + 'playwright.config.ts': ` + export default { use: { trace: 'on' } }; + `, + 'a.spec.ts': ` + import { test, expect } from '@playwright/test'; + test('test 1', async ({ page }) => { + await page.goto('about:blank'); + }); + `, + }, {}, { PW_TEST_DISABLE_TRACING: '1' }); + + expect(result.exitCode).toBe(0); + expect(result.passed).toBe(1); + expect(fs.existsSync(testInfo.outputPath('test-results', 'a-test-1', 'trace.zip'))).toBe(false); +});