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

组织大型快照文件

对于大型项目,建议合理组织测试以保持快照文件可管理:
目录结构

故障排除

快照失败

当快照不匹配时,会看到差异视图:
diff
常见原因:
  • 有意更改(使用 --update-snapshots 更新)
  • 无意更改(修正代码)
  • 动态数据(使用属性匹配器)
  • 环境差异(标准化数据)

平台差异

注意平台间的差异:
test.ts