基础快照
快照测试使用.toMatchSnapshot() 匹配器编写:
expect 的参数将被序列化并写入测试文件旁边的 __snapshots__ 目录中的特殊快照文件。
快照文件
运行上面的测试后,Bun 将创建:directory structure
__snapshots__/snap.test.ts.snap
更新快照
可以使用以下命令重新生成快照:terminal
- 您有意更改了输出
- 您正在添加新的快照测试
- 预期输出确实发生了变化
内联快照
对于较小的值,您可以使用.toMatchInlineSnapshot() 的内联快照。这些快照直接存储在您的测试文件中:
使用内联快照
- 使用
.toMatchInlineSnapshot()编写测试 - 运行一次测试
- Bun 自动使用快照更新您的测试文件
- 在后续运行中,值将与内联快照进行比较
错误快照
您还可以使用.toThrowErrorMatchingSnapshot() 和 .toThrowErrorMatchingInlineSnapshot() 快照错误消息:
高级快照用法
复杂对象
快照适用于复杂的嵌套对象:数组快照
数组也非常适合快照测试:函数输出快照
快照函数的输出:React 组件快照
快照对于 React 组件特别有用:属性匹配器
对于在测试运行之间更改的值(如时间戳或 ID),请使用属性匹配器:snapshot file
自定义序列化器
您可以自定义对象在快照中的序列化方式:最佳实践
保持快照小
使用描述性测试名称
分组相关快照
处理动态数据
管理快照
审查快照更改
当快照更改时,仔细审查它们:terminal
清理未使用的快照
Bun 将警告未使用的快照:warning
组织大型快照文件
对于大型项目,考虑组织测试以保持快照文件可管理:directory structure
故障排除
快照失败
当快照失败时,您将看到差异:diff
- 有意更改(使用
--update-snapshots更新) - 意外更改(修复代码)
- 动态数据(使用属性匹配器)
- 环境差异(标准化数据)