feat: move toHaveScreenshot to use old snapshot paths by default (#14006)
Note: all toHaveScreenshot tests still use `__screenshots__` directory for their expectations. One more test was added to make sure that by default, `toHaveScreenshot` uses old snapshots.
This commit is contained in:
parent
f4dc067a49
commit
98945a81a8
|
|
@ -295,8 +295,11 @@ export async function toHaveScreenshot(
|
||||||
if (!testInfo)
|
if (!testInfo)
|
||||||
throw new Error(`toHaveScreenshot() must be called during the test`);
|
throw new Error(`toHaveScreenshot() must be called during the test`);
|
||||||
const config = (testInfo.project._expect as any)?.toHaveScreenshot;
|
const config = (testInfo.project._expect as any)?.toHaveScreenshot;
|
||||||
|
const snapshotPathResolver = process.env.PLAYWRIGHT_EXPERIMENTAL_FEATURES && config?._useScreenshotsDir
|
||||||
|
? testInfo._screenshotPath.bind(testInfo)
|
||||||
|
: testInfo.snapshotPath.bind(testInfo);
|
||||||
const helper = new SnapshotHelper(
|
const helper = new SnapshotHelper(
|
||||||
testInfo, testInfo._screenshotPath.bind(testInfo), 'png',
|
testInfo, snapshotPathResolver, 'png',
|
||||||
{
|
{
|
||||||
maxDiffPixels: config?.maxDiffPixels,
|
maxDiffPixels: config?.maxDiffPixels,
|
||||||
maxDiffPixelRatio: config?.maxDiffPixelRatio,
|
maxDiffPixelRatio: config?.maxDiffPixelRatio,
|
||||||
|
|
|
||||||
|
|
@ -180,7 +180,9 @@ test('should include multiple image diffs', async ({ runInlineTest, page, showRe
|
||||||
|
|
||||||
const result = await runInlineTest({
|
const result = await runInlineTest({
|
||||||
'playwright.config.ts': `
|
'playwright.config.ts': `
|
||||||
|
process.env.PLAYWRIGHT_EXPERIMENTAL_FEATURES = 1;
|
||||||
module.exports = {
|
module.exports = {
|
||||||
|
expect: { toHaveScreenshot: { _useScreenshotsDir: true } },
|
||||||
screenshotsDir: '__screenshots__',
|
screenshotsDir: '__screenshots__',
|
||||||
use: { viewport: { width: ${IMG_WIDTH}, height: ${IMG_HEIGHT} }}
|
use: { viewport: { width: ${IMG_WIDTH}, height: ${IMG_HEIGHT} }}
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -97,6 +97,27 @@ test('should fail with proper error when unsupported argument is given', async (
|
||||||
expect(stripAnsi(result.output)).toContain(`Expected options.clip.width not to be 0`);
|
expect(stripAnsi(result.output)).toContain(`Expected options.clip.width not to be 0`);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('should use match snapshot paths by default', async ({ runInlineTest }, testInfo) => {
|
||||||
|
const result = await runInlineTest({
|
||||||
|
// The helper function `playwrightConfig` injects a `_useScreenshotsDir` flag.
|
||||||
|
// Provide default config manually instead.
|
||||||
|
'playwright.config.js': `
|
||||||
|
process.env.PLAYWRIGHT_EXPERIMENTAL_FEATURES = '1';
|
||||||
|
module.exports = {};
|
||||||
|
`,
|
||||||
|
'a.spec.js': `
|
||||||
|
pwt.test('is a test', async ({ page }, testInfo) => {
|
||||||
|
testInfo.snapshotSuffix = '';
|
||||||
|
await expect(page).toHaveScreenshot('snapshot.png');
|
||||||
|
});
|
||||||
|
`
|
||||||
|
}, { 'update-snapshots': true });
|
||||||
|
expect(result.exitCode).toBe(0);
|
||||||
|
|
||||||
|
const snapshotOutputPath = testInfo.outputPath('a.spec.js-snapshots', 'snapshot.png');
|
||||||
|
expect(fs.existsSync(snapshotOutputPath)).toBe(true);
|
||||||
|
});
|
||||||
|
|
||||||
test('should have scale:css by default', async ({ runInlineTest }, testInfo) => {
|
test('should have scale:css by default', async ({ runInlineTest }, testInfo) => {
|
||||||
const result = await runInlineTest({
|
const result = await runInlineTest({
|
||||||
...playwrightConfig({ screenshotsDir: '__screenshots__' }),
|
...playwrightConfig({ screenshotsDir: '__screenshots__' }),
|
||||||
|
|
@ -692,14 +713,14 @@ test('should respect maxDiffPixels option', async ({ runInlineTest }) => {
|
||||||
|
|
||||||
expect((await runInlineTest({
|
expect((await runInlineTest({
|
||||||
...playwrightConfig({
|
...playwrightConfig({
|
||||||
projects: [
|
|
||||||
{
|
|
||||||
screenshotsDir: '__screenshots__',
|
|
||||||
expect: {
|
expect: {
|
||||||
toHaveScreenshot: {
|
toHaveScreenshot: {
|
||||||
maxDiffPixels: BAD_PIXELS
|
maxDiffPixels: BAD_PIXELS
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
projects: [
|
||||||
|
{
|
||||||
|
screenshotsDir: '__screenshots__',
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
}),
|
}),
|
||||||
|
|
@ -798,13 +819,13 @@ test('should respect maxDiffPixelRatio option', async ({ runInlineTest }) => {
|
||||||
|
|
||||||
expect((await runInlineTest({
|
expect((await runInlineTest({
|
||||||
...playwrightConfig({
|
...playwrightConfig({
|
||||||
projects: [{
|
|
||||||
screenshotsDir: '__screenshots__',
|
|
||||||
expect: {
|
expect: {
|
||||||
toHaveScreenshot: {
|
toHaveScreenshot: {
|
||||||
maxDiffPixelRatio: BAD_RATIO,
|
maxDiffPixelRatio: BAD_RATIO,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
projects: [{
|
||||||
|
screenshotsDir: '__screenshots__',
|
||||||
}],
|
}],
|
||||||
}),
|
}),
|
||||||
'__screenshots__/a.spec.js/snapshot.png': EXPECTED_SNAPSHOT,
|
'__screenshots__/a.spec.js/snapshot.png': EXPECTED_SNAPSHOT,
|
||||||
|
|
@ -920,6 +941,9 @@ test('should update expectations with retries', async ({ runInlineTest }, testIn
|
||||||
});
|
});
|
||||||
|
|
||||||
function playwrightConfig(obj: any) {
|
function playwrightConfig(obj: any) {
|
||||||
|
obj.expect ??= {};
|
||||||
|
obj.expect.toHaveScreenshot ??= {};
|
||||||
|
obj.expect.toHaveScreenshot._useScreenshotsDir ??= true;
|
||||||
return {
|
return {
|
||||||
'playwright.config.js': `
|
'playwright.config.js': `
|
||||||
process.env.PLAYWRIGHT_EXPERIMENTAL_FEATURES = '1';
|
process.env.PLAYWRIGHT_EXPERIMENTAL_FEATURES = '1';
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue