1. 快照测试(Snapshot Testing)的适用场景与陷阱
快照测试(Snapshot Testing)适用于哪些场景?它在实践中存在哪些陷阱,应如何规避?
- 快照测试的适用场景:UI 输出与序列化结果防回归
- 快照的脆弱性与"盲目更新"陷阱
- 快照与代码评审、更新规范等治理手段的配合
快照测试将组件渲染输出或函数序列化结果与磁盘上保存的快照逐字比对,当输出变化时测试失败并生成 diff。适用场景包括:防止 UI 结构与文本内容的意外回归、跟踪配置对象与序列化数据结构的变更、在重构后快速确认输出未发生变化。它的本质是"变更检测器"而非"正确性证明"——即使输出变化是预期的,快照比对依然会失败。
主要陷阱有三类:一是快照体积庞大且难以审查,开发者往往不逐行阅读差异;二是失败时直接以 -u 盲目更新快照,可能掩盖真实回归;三是快照与实现细节(DOM 结构、className)耦合过紧,导致频繁误报与维护负担。规避方式:控制快照粒度(只快照有意义的输出)、将快照更新纳入代码评审流程、对高频变化区域改用针对性断言、为快照补充语义断言而非只依赖全文比对。
本题考察对快照测试本质的理解:快照擅长捕获变更,不擅长验证正确性。回答应点明适用场景(防回归)与核心陷阱(盲目 -u、审查困难、实现耦合),并给出治理手段,体现对测试可维护性的工程认知。