Skip to main content
快照测试保存值的输出,并将其与未来的测试运行进行比较。用于 UI 组件、复杂对象或任何需要保持一致的输出。

基本快照

快照测试使用 .toMatchSnapshot() 匹配器编写:
test.ts
此测试首次运行时,Bun 会序列化 expect 的参数,并将其写入测试文件旁边的 __snapshots__ 目录中的快照文件。

快照文件

首次运行后,Bun 会创建:
目录结构
快照文件包含:
__snapshots__/snap.test.ts.snap
在后续运行中,Bun 会将参数与磁盘上的快照进行比较。

更新快照

使用以下命令重新生成快照:
terminal
当你故意更改了输出或添加了新的快照测试时执行此操作。

内联快照

对于较小的值,使用 .toMatchInlineSnapshot()。内联快照直接存储在你的测试文件中:
test.ts
首次运行后,Bun 会自动更新你的测试文件:
test.ts

使用内联快照

  1. 使用 .toMatchInlineSnapshot() 编写测试
  2. 运行一次测试
  3. Bun 会自动用快照更新你的测试文件
  4. 在后续运行中,Bun 会将值与内联快照进行比较

错误快照

你也可以使用 .toThrowErrorMatchingSnapshot().toThrowErrorMatchingInlineSnapshot() 对错误消息进行快照:
test.ts
运行后,内联版本变为:
test.ts

高级快照用法

复杂对象

快照非常适合复杂的嵌套对象:
test.ts

数组快照

数组也非常适合快照测试:
test.ts

函数输出快照

对函数的输出进行快照:
test.ts

React 组件快照

快照非常适合 React 组件:
test.ts

属性匹配器

对于在测试运行之间变化的数值(如时间戳或 ID),请使用属性匹配器:
test.ts
快照文件存储为:
快照文件

最佳实践

保持快照小巧

test.ts

使用描述性测试名称

test.ts

分组相关快照

test.ts

处理动态数据

test.ts

管理快照

审查快照变更

当快照发生变化时,请仔细审查:
terminal

组织大型快照文件

对于大型项目,考虑组织测试以保持快照文件可管理:
directory structure

故障排除

快照失败

当快照失败时,你会看到差异:
diff
常见原因:
  • 有意的更改(使用 --update-snapshots 更新)
  • 无意的更改(修复代码)
  • 动态数据(使用属性匹配器)
  • 环境差异(规范化数据)

平台差异

注意平台特定的差异:
test.ts