Test Cafe で Resemble.JS ライブラリを使用する関数を使用して、実際のスクリーンショットとベースのスクリーンショットを比較しています。私のフィクスチャには 2 つのテストがあり、両方のテストはスクリーンショットの不一致が原因でレポートで失敗するはずですが、最初のテストのみが失敗として表示され、2 つ目のテストはレポートで渡されます。
このような状況をどのように処理し、両方のテストを失敗としてマークすることができるか教えてください。
スクリーンショットを比較する機能:
const peformVisualRegression = async (testFixture, testName) => {
// take actual screenshot
await t.takeScreenshot(path.join('actual', testFixture, `${testName}.png`));
const actualScreenshotAbsolutePath = getAbsolutePathForScreenshot(
'actual',
testFixture,
testName
);
const isActualScreenshotTaken = fs.existsSync(actualScreenshotAbsolutePath);
const baseScreenshotAbsolutePath = getAbsolutePathForScreenshot(
'base',
testFixture,
testName
);
const isBaseScreenshotTaken = fs.existsSync(baseScreenshotAbsolutePath);
if (isActualScreenshotTaken && isBaseScreenshotTaken) {
await resemble(baseScreenshotAbsolutePath)
.compareTo(actualScreenshotAbsolutePath)
.scaleToSameSize()
.outputSettings({
errorColor: {
blue: 255,
green: 0,
red: 255
},
errorType: 'movement',
largeImageThreshold: 1200,
outputDiff: true,
transparency: 0.3,
useCrossOrigin: false
})
.onComplete(async data => {
if (data.rawMisMatchPercentage > 0) {
logger.error(
`Mismatch percentage for ${testFixture}/${testName} between actual and base screenshot is ${
data.rawMisMatchPercentage
}`
);
// write a diff image
fs.writeFileSync(
path.join(
path.dirname(actualScreenshotAbsolutePath),
`${path.basename(
actualScreenshotAbsolutePath,
path.extname(actualScreenshotAbsolutePath)
)}-diff.png`
),
data.getBuffer()
);
// fail test
throw new Error(
`Visual mismatch detected in test: ${testFixture}/${testName}. Please investigate.`
);
}
});
}
フィクスチャ:
fixture('Test Duckduckgo search fixture 1').page('https://duckduckgo.com');
test('Testcafe case 1 | @TestrailID:1094986', async t => {
await t.expect(samplePage.searchInputField.exists).ok();
await samplePage.enterText('dog');
const location = await getWindowLocation();
await t.expect(location.href).contains('q=dog');
await peformVisualRegression(
'Test Duckduckgo search fixture 1',
'Testcafe case 1'
);
});
test('Testcafe case 2 | @TestrailID:1094987', async t => {
await t.expect(samplePage.searchInputField.exists).ok();
await peformVisualRegression(
'Test Duckduckgo search fixture 1',
'Testcafe case 2'
);
});