基本快照
快照测试使用.toMatchSnapshot() 匹配器编写:
expect 的参数会被序列化并写入与测试文件同级的 __snapshots__ 目录下的特殊快照文件中。
快照文件
运行上述测试后,Bun 会创建:目录结构
__snapshots__/snap.test.ts.snap
更新快照
可以使用以下命令重新生成快照:terminal
- 你有意更改了输出
- 你添加了新的快照测试
- 预期输出确实发生了变化
内联快照
对于较小的值,可以使用.toMatchInlineSnapshot() 进行内联快照。这些快照直接存储在测试文件中:
使用内联快照步骤
- 编写包含
.toMatchInlineSnapshot()的测试 - 运行测试一次
- Bun 会自动更新测试文件,插入快照
- 后续运行时,值会与内联快照比较
错误快照
你也可以使用.toThrowErrorMatchingSnapshot() 和 .toThrowErrorMatchingInlineSnapshot() 来快照错误消息:
高级快照用法
复杂对象
快照适用于复杂的嵌套对象:数组快照
数组同样适合快照测试:函数输出快照
快照函数的返回值:React 组件快照
快照对 React 组件特别有用:属性匹配器
对于在测试运行间会变化的值(比如时间戳或 ID),使用属性匹配器:快照文件
自定义序列化器
你可以自定义对象在快照中的序列化方式:最佳实践
保持快照文件简洁
使用描述性测试名称
分组相关快照
处理动态数据
管理快照
复查快照变更
当快照发生变化时,需仔细检查:terminal
清理未使用的快照
Bun 会提示未使用的快照:警告
组织大型快照文件
对于大型项目,建议合理组织测试以保持快照文件可管理:目录结构
故障排除
快照失败
当快照不匹配时,会看到差异视图:diff
- 有意更改(使用
--update-snapshots更新) - 无意更改(修正代码)
- 动态数据(使用属性匹配器)
- 环境差异(标准化数据)