chai-screenshot

此插件旨在使用 chai 作为断言库来比较两张图片。
它受到 Playwright 创建的 haveScreenShot 方法和 chai-image 的启发,后者似乎是一个未维护的库。

目前只支持 PNG 图片。

第一步

使用 npm 安装插件

npm i chai-screenshot --save-dev

然后将其添加到您的测试文件中

const { expect, use } = require('chai');
const chaiScreenshot = require("chai-screenshot");

use(chaiScreenshot);

最后在您的测试脚本中使用它(此示例使用 mocha)

it('The screenshot should match the expected image', function() {
    const actual = 'actual.png';
    const expected = 'expected.png';

    expect(actual).to.matchScreenshot(expected);
});

如果断言失败,插件会创建一个名为 screenshot-output 的目录,并在其中生成一个 diff png 图片。

如何使用它

您可以将缓冲区、文件路径字符串甚至 base64 图片字符串作为实际参数和预期参数传递。随意使用任何对您有效的组合!

// Buffer:
const bufActual = Buffer.from(fs.readFileSync('actual.png'));
const bufExpected = Buffer.from(fs.readFileSync('expected.png'));

expect(bufActual).to.matchScreenshot(bufExpected);

// Filepath
expect('assets/actual.png').to.matchScreenshot('assets/expected.png');

// Base64 (example uses Selenium):
const actual = await driver.findElement({id: 'canvas'}).takeScreenshot(true);

expect(actual).to.matchScreenshot('assets/expected.png');

此插件在底层使用 pixelmatch 进行视觉比较。这意味着您也可以配置 pixelmatch 需要进行差异化的选项。在这个例子中,让我们将阈值选项设置为不那么敏感


expect("actual.png").to.matchScreenshot('expected.png', {
    diff: { threshold: 0.5 }
});

您可以查看完整的 pixelmatch 选项列表 这里

如果希望在测试失败后设置不同的目录来保存输出(图像 diff)或重命名默认文件名,可以按照以下方式设置选项

expect("actual.png").to.matchScreenshot('expected.png', {
    diff: { threshold: 0.5 },
    output: {
        dir: 'myFolder',
        name: 'test.png'} // Don't forget to add the .png extension
});

贡献

想贡献? 您是否发现错别字或可以修复的糟糕代码行?
✨欢迎您的 PR!✨
您也可以创建一个 issue 并讨论可以进行哪些改进。