diff --git a/src/test/matchers/toMatchSnapshot.ts b/src/test/matchers/toMatchSnapshot.ts index c987b032a0..f1d9b7b600 100644 --- a/src/test/matchers/toMatchSnapshot.ts +++ b/src/test/matchers/toMatchSnapshot.ts @@ -46,7 +46,7 @@ export function toMatchSnapshot(this: ReturnType, received: options.name, testInfo.snapshotPath, testInfo.outputPath, - testInfo.config.updateSnapshots, + testInfo.retry < testInfo.project.retries ? 'none' : testInfo.config.updateSnapshots, withNegateComparison, options ); diff --git a/tests/playwright-test/golden.spec.ts b/tests/playwright-test/golden.spec.ts index b997e9359d..c3cd866a70 100644 --- a/tests/playwright-test/golden.spec.ts +++ b/tests/playwright-test/golden.spec.ts @@ -562,3 +562,24 @@ test('should attach expected/actual and no diff', async ({ runInlineTest }, test ]); }); +test('should fail with missing expectations and retries', async ({ runInlineTest }, testInfo) => { + const result = await runInlineTest({ + ...files, + 'playwright.config.ts': ` + module.exports = { retries: 1 }; + `, + 'a.spec.js': ` + const { test } = require('./helper'); + test('is a test', ({}) => { + expect('Hello world').toMatchSnapshot('snapshot.txt'); + }); + ` + }); + + expect(result.exitCode).toBe(1); + expect(result.failed).toBe(1); + const snapshotOutputPath = testInfo.outputPath('a.spec.js-snapshots/snapshot.txt'); + expect(result.output).toContain(`${snapshotOutputPath} is missing in snapshots, writing actual`); + const data = fs.readFileSync(snapshotOutputPath); + expect(data.toString()).toBe('Hello world'); +});