@blazediff/bun

中文文档
2.0.0发布于 2026/11/05MITTypeScriptESM + CJS构建来源已验证近 30 天下载 7228

Bun 测试比对器, 用于用 blazediff 进行视觉回归测试

中文使用文档
文档目录23 节
  1. 特征
  2. 安装
  3. 快速启动
  4. API 参考
  5. 到MatchImageSnapshot( 选项 )
  6. 用法图案
  7. 基本快照测试
  8. 不同的比较方法
  9. 更新快照
  10. 自定义阈值
  11. 自定义快照目录
  12. 与剧作家
  13. 否认
  14. 序列测试
  15. 快照状态跟踪
  16. Bun- Special 注释
  17. 需要抓图标识符
  18. 测试路径检测
  19. 设置
  20. 自动设置( 建议)
  21. 手动设置
  22. 类型脚本
  23. 链接

@ blazediff/ bun (英语)

npm bundle size NPM Downloads

Bun测试匹配器,用于用blazediff进行视觉回归测试. 由@blazediff/ matcher提供动力.

特征

  • 原装匹配器数字 : toMatchImageSnapshot() 延长 Bun 的预期
  • 快照状态跟踪: Bun 报告准确的快照数( 当 API 可用时)
  • 多重比较算法数字 : core, (中文(简体) ), core-native, (中文(简体) ), ssim, (中文(简体) ), msssim, (中文(简体) ), hitchhikers-ssim, (中文(简体) ), gmsd
  • 自动设置: 自动导入和登记
  • 更新模式: 与 Bun 工作 -u编号 :--update 旗帜
  • 类型脚本支持: 包括完整类型定义

安装

npm install --dev @blazediff/bun

同伴依赖关系(单位:千分之一)

快速启动

import { expect, it } from 'bun:test';
import '@blazediff/bun';

it('should match screenshot', async () => {
  const screenshot = await takeScreenshot();

  await expect(screenshot).toMatchImageSnapshot({
    method: 'core',
  });
});

API 参考

到MatchImageSnapshot( 选项 )

Bun测试匹配器,用于图像快照比较.

参数 类型 说明
options 部分“ Matcher 选项” 可选比较方案(见下文)

选项

选项 类型 默认 说明
method “ 核心 ” “ 核心内在 ” “ sim ” “ mssim ” “ hitchhikers ” “ gmsd ” "核心" ("核心") 要使用的比较算法
failureThreshold 编号 0 个 允许的像素数或百分比差异
failureThresholdType “ 像素”“%” "像素"(像素) 如何解释失败风险
snapshotsDir 字符串 "... 弹出..." 相对于测试文件存储快取目录
snapshotIdentifier 字符串 "弹出" 快取文件的标识符( Bun 需要)
updateSnapshots 布尔 虚假 强制更新快照
diff 对象 - 说吧 核心、核心瓦斯和核心内在的备选办法,例如: { threshold: 0.1, antialiasing: true }。 。 。 . ssim 财务报告和审定财务报表 gmsd 掌握这些方法的选择。 请参看 @ blazediff/ matcher
runInWorker 布尔 真实 运行工人线条的比较,以提高业绩

见 @ blazediff/ marcher (英语) 用于完整选项文档.

用法图案

基本快照测试

import { expect, it } from 'bun:test';
import '@blazediff/bun';

it('renders correctly', async () => {
  const screenshot = await page.screenshot();

  await expect(screenshot).toMatchImageSnapshot({
    method: 'core',
    snapshotIdentifier: 'homepage',
  });
});

不同的比较方法

// Fast Rust-native comparison (paths, PNG buffers or raw images)
await expect('/path/to/image.png').toMatchImageSnapshot({
  method: 'core-native',
  snapshotIdentifier: 'image-core-native',
});

// Pure JavaScript comparison
await expect(imageBuffer).toMatchImageSnapshot({
  method: 'core',
  snapshotIdentifier: 'image-core',
});

// Perceptual similarity (SSIM)
await expect(imageBuffer).toMatchImageSnapshot({
  method: 'ssim',
  snapshotIdentifier: 'image-ssim',
});

// Gradient-based comparison
await expect(imageBuffer).toMatchImageSnapshot({
  method: 'gmsd',
  snapshotIdentifier: 'image-gmsd',
});

更新快照

# Update all snapshots (recommended)
bun test --update-snapshots

# Or using environment variable
BUN_UPDATE_SNAPSHOTS=true bun test

或在方案方面:

await expect(screenshot).toMatchImageSnapshot({
  method: 'core',
  snapshotIdentifier: 'homepage',
  updateSnapshots: true,
});

自定义阈值

// Allow up to 100 pixels difference
await expect(screenshot).toMatchImageSnapshot({
  method: 'core',
  snapshotIdentifier: 'homepage',
  failureThreshold: 100,
  failureThresholdType: 'pixel',
});

// Allow up to 0.1% difference
await expect(screenshot).toMatchImageSnapshot({
  method: 'core',
  snapshotIdentifier: 'homepage',
  failureThreshold: 0.1,
  failureThresholdType: 'percent',
});

自定义快照目录

await expect(screenshot).toMatchImageSnapshot({
  method: 'core',
  snapshotIdentifier: 'homepage',
  snapshotsDir: '__image_snapshots__',
});

与剧作家

import { test, expect } from 'bun:test';
import '@blazediff/bun';
import { chromium } from 'playwright';

test('visual regression with Playwright', async () => {
  const browser = await chromium.launch();
  const page = await browser.newPage();
  await page.goto('https://example.com');

  const screenshot = await page.screenshot();
  await expect(screenshot).toMatchImageSnapshot({
    method: 'core',
    snapshotIdentifier: 'homepage',
  });

  await browser.close();
});

否认

// Assert images are different
await expect(screenshot).not.toMatchImageSnapshot({
  method: 'core',
  snapshotIdentifier: 'different',
});

序列测试

对于可能相互干扰的测试(例如清理快照),使用串行执行:

import { describe, it } from 'bun:test';

describe.serial('Visual regression tests', () => {
  it('test 1', async () => {
    await expect(image1).toMatchImageSnapshot({
      method: 'core',
      snapshotIdentifier: 'test-1',
    });
  });

  it('test 2', async () => {
    await expect(image2).toMatchImageSnapshot({
      method: 'core',
      snapshotIdentifier: 'test-2',
    });
  });
});

快照状态跟踪

这个匹配器试图与Bun的快照状态跟踪系统整合. 如果 Bun 将快照状态 API 暴露给自定义匹配者, 测试摘要将显示准确的计数 :

Snapshots  2 written | 1 updated | 5 passed

说明: Bun的快照状态API对于自定义匹配者是有限的. 如果快照状态不可用, 图像快照仍将正确工作, 但可能不会出现在 Bun 的测试摘要计数中 .

Bun- Special 注释

需要抓图标识符

不像Jest和Vitest可以自动生成测试名称的快照标识,Bun的上下文曝光有限。 建议永远提供 snapshotIdentifier数字 :

await expect(screenshot).toMatchImageSnapshot({
  method: 'core',
  snapshotIdentifier: 'my-component-state', // Recommended
});

测试路径检测

Bun 提供 Bun.main 用于确定测试文件路径。 在一些边缘情况下,您可能需要指定 snapshotsDir 作为绝对路径 :

await expect(screenshot).toMatchImageSnapshot({
  method: 'core',
  snapshotIdentifier: 'homepage',
  snapshotsDir: '/absolute/path/to/snapshots',
});

设置

简单地导入测试文件中的软件包 :

import '@blazediff/bun';

匹配器在导入时自动注册.

手动设置

或者,明确调用设置函数:

import { setupBlazediffMatchers } from '@blazediff/bun';

setupBlazediffMatchers();

类型脚本

包含类型脚本。 要使用 TypeScript 的匹配器 :

import '@blazediff/bun';

declare module 'bun:test' {
  interface Matchers<T = unknown> {
    toMatchImageSnapshot(options?: Partial<import('@blazediff/matcher').MatcherOptions>): Promise<MatcherResult>;
  }
}

在导入软件包时自动包含类型增强.

版本与发布记录

@blazediff/bun 共发布 31 个版本,首次发布于 2026/01/05;过去 12 个月发布了 31 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
2.0.0latest2026/11/053 天前
1.2.162026/10/2612 天前
1.2.152026/08/272 个月前
1.2.142026/08/172 个月前
1.2.132026/08/033 个月前
1.2.122026/07/163 个月前

其他发布通道:fix-testing-matcher-performance → 0.0.0-fix-testing-matcher-performance-20260223115318。

关于 @blazediff/bun 的常见问题

@blazediff/bun 是什么?

Bun 测试比对器, 用于用 blazediff 进行视觉回归测试

如何安装 @blazediff/bun?

在项目目录运行 npm install @blazediff/bun,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:bun(>=1.0.0)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@blazediff/bun 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@blazediff/bun 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@blazediff/bun 可以商用吗?

@blazediff/bun 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@blazediff/bun 的下载量有多少?

根据 npm 官方下载统计,@blazediff/bun 在 2026/10/09 – 2026/11/07 这 30 天内被下载 7,228 次,日均约 241 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@blazediff/bun 还在维护吗?

最新版本 2.0.0 发布于 2026/11/05(3 天前);至今共发布 31 个版本,其中过去 12 个月发布了 31 个;首次发布于 2026/01/05。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。