提交 893a69e8 编写于 作者: Anne_LXM's avatar Anne_LXM

toMatchImageSnapshot->toSaveImageSnapshot

上级 693acc2a
const path = require('path'); const path = require("path");
const { const fs = require("fs");
configureToMatchImageSnapshot const {configureToMatchImageSnapshot} = require('jest-image-snapshot');
} = require('jest-image-snapshot'); let saveImageSnapshotDir = process.env.saveImageSnapshotDir || path.join(__dirname, '__snapshot__');
const hbuilderx_version = process.env.HX_Version
const uniTestPlatformInfo = process.env.uniTestPlatformInfo ? process.env.uniTestPlatformInfo.replace(/\s/g,'_') : ''
const folderName = `__image_snapshots__/${hbuilderx_version}/__${uniTestPlatformInfo}__`
const baseFolderName = `__image_snapshots__/base/__${uniTestPlatformInfo}__`
expect.extend({ expect.extend({
toMatchImageSnapshot: configureToMatchImageSnapshot({ // toMatchImageSnapshot: configureToMatchImageSnapshot({
customSnapshotIdentifier(args) { // customSnapshotIdentifier(args) {
return args.currentTestName.replace(/\//g, '-').replace(' ', '-'); // return args.currentTestName.replace(/\//g, "-").replace(" ", "-");
}, // },
customSnapshotsDir: path.join(__dirname, baseFolderName), // customSnapshotsDir: process.env.saveImageSnapshotDir,
customDiffDir: path.join(__dirname, `${folderName}/`, 'diff'), // customDiffDir: path.join(saveImageSnapshotDir, "diff"),
}), // }),
}); toSaveSnapshot,
\ No newline at end of file toSaveImageSnapshot,
});
const testCaseToSnapshotFilePath =
process.env.testCaseToSnapshotFilePath || "./testCaseToSnapshotFilePath.json";
if (!fs.existsSync(testCaseToSnapshotFilePath)) {
fs.writeFileSync(testCaseToSnapshotFilePath, "{}");
}
function writeTestCaseToSnapshotFile(testCaseName, snapshotFilePath) {
const data = JSON.parse(fs.readFileSync(testCaseToSnapshotFilePath));
if (testCaseName.includes(__dirname)) {
testCaseName = testCaseName.substring(`${__dirname}`.length);
if (testCaseName[0] == '/' || testCaseName[0] == '\\') {
testCaseName = testCaseName.substring(1);
};
};
if (!data[testCaseName]) {
data[testCaseName] = [snapshotFilePath];
} else {
data[testCaseName].push(snapshotFilePath);
}
fs.writeFileSync(testCaseToSnapshotFilePath, JSON.stringify(data, null, 2));
}
function toSaveSnapshot(received, {
customSnapshotsDir,
fileName
} = {}) {
const {
snapshotState: {
_rootDir
},
testPath,
currentTestName,
} = this;
const SNAPSHOTS_DIR = "__file_snapshots__";
const snapshotDir =
process.env.saveSnapshotDir ||
createSnapshotDir({
customSnapshotsDir,
testPath,
SNAPSHOTS_DIR,
});
const _fileName = createFileName({
fileName,
testPath,
currentTestName,
});
const filePath = path.join(snapshotDir, _fileName);
let message = () => `${currentTestName} toSaveSnapshot success`;
let pass = true;
try {
checkSnapshotDir(path.dirname(filePath));
fs.writeFileSync(filePath, received);
writeTestCaseToSnapshotFile(testPath.replace(`${_rootDir}/`, ""), filePath);
} catch (e) {
console.log("toSaveSnapshot fail", e);
message = () => e.message;
pass = false;
}
return {
message,
pass,
};
}
function toSaveImageSnapshot(
received, {
customSnapshotsDir,
customSnapshotIdentifier
} = {}
) {
const {
snapshotState: {
_rootDir
},
testPath,
currentTestName,
} = this;
const SNAPSHOTS_DIR = "__image_snapshots__";
const snapshotDir =
process.env.saveImageSnapshotDir ||
createSnapshotDir({
customSnapshotsDir,
testPath,
SNAPSHOTS_DIR,
});
const _fileName = createFileName({
fileName: customSnapshotIdentifier ? `${customSnapshotIdentifier()}.png` : "",
testPath,
currentTestName,
fileType: "png",
});
const filePath = path.join(snapshotDir, _fileName);
let message = () => `${currentTestName} toSaveImageSnapshot success`;
let pass = true;
try {
checkSnapshotDir(path.dirname(filePath));
fs.writeFileSync(filePath, Buffer.from(received, "base64"));
writeTestCaseToSnapshotFile(testPath.replace(`${_rootDir}/`, ""), filePath);
} catch (e) {
console.log("toSaveImageSnapshot fail", e);
message = () => e.message;
pass = false;
}
return {
message,
pass,
};
}
function createSnapshotDir({
customSnapshotsDir,
testPath,
SNAPSHOTS_DIR
}) {
return customSnapshotsDir || path.join(path.dirname(testPath), SNAPSHOTS_DIR);
}
function createFileName({
fileName,
testPath,
currentTestName,
fileType
}) {
return (
fileName ||
createSnapshotIdentifier({
testPath,
currentTestName,
fileType,
})
);
}
function createSnapshotIdentifier({
testPath,
currentTestName,
fileType = "txt",
}) {
const snapshotIdentifier = kebabCase(
`${path.basename(testPath)}-${currentTestName}`
);
const counter = timesCalled.get(`${snapshotIdentifier}-${fileType}`) || 1;
timesCalled.set(`${snapshotIdentifier}-${fileType}`, counter + 1);
return `${snapshotIdentifier}-${counter}.${fileType}`;
}
function kebabCase(str) {
return str
.replaceAll(/([a-z])([A-Z])/g, "$1-$2")
.replaceAll(/\s+/g, "-")
.replaceAll(/_+/g, "-")
.replaceAll(/\/+/g, "-")
.replaceAll(/\.+/g, "-")
.toLowerCase();
}
function checkSnapshotDir(snapshotDir) {
if (!fs.existsSync(snapshotDir)) {
fs.mkdirSync(snapshotDir, {
recursive: true,
});
}
}
const timesCalled = new Map();
...@@ -19,8 +19,13 @@ describe('page screenshot test', () => { ...@@ -19,8 +19,13 @@ describe('page screenshot test', () => {
console.log("page screenshot test finish"); console.log("page screenshot test finish");
}); });
test.each(pages)('%s', async () => { test.each(pages)('%s', async () => {
const image = await program.screenshot(); // const image = await program.screenshot();
expect(image).toMatchImageSnapshot(); // expect(image).toMatchImageSnapshot();
await page.waitFor(500); // await page.waitFor(500);
const image = await program.screenshot({
fullPage: true
});
expect(image).toSaveImageSnapshot();
await page.waitFor(500);
}) })
}) })
\ No newline at end of file
...@@ -55,10 +55,14 @@ describe('ucenter', () => { ...@@ -55,10 +55,14 @@ describe('ucenter', () => {
}) })
} }
it('screenshot',async()=>{ it('screenshot',async()=>{
await program.screenshot({ // await program.screenshot({
path: "static/screenshot/ucenter.png" // path: "static/screenshot/ucenter.png"
}) // })
await page.waitFor(500); const savePath = process.env.saveImageSnapshotDir
console.log('savePath',savePath)
await program.screenshot({
path: savePath
})
}) })
}) })
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册