← 中文资源

简体中文版本

评审并瘦身失控的快照测试

审计快照体积与更新频率,把承载意图的用例改为显式断言,仅给"结构即契约"的场景留快照。

阅读英文原文

目标

快照测试以低成本承诺广覆盖,也确实兑现,直到更新变成条件反射。审计是定量的:按文件测字节数与变更频率,盲区自己报名。瘦身的准则是意图:具体属性重要就写显式断言;只有“输出形状本身即契约”的场景才留快照,且必须内联、小巧。

步骤要点

  1. 用脚本按“体积 + 三个月 git 变更次数”给快照排名,又大又常变的就是盲目批准机器。
  2. 删除无意义快照后带 -u 重跑,观察哪些快照曾静默吸收变更,这是最直白的无价值信号。
  3. 把承载意图的用例改成显式断言:总额格式、货币代码,回归时报的是具体失败而非一屏 diff。
  4. 结构即契约处保留 inline snapshot:与测试同处、diff 直接出现在 PR 里可评审。
  5. CI 加体积门禁,超过 2000 字节的新快照直接构建失败,防止再度失控。

排错提示

团队怕删快照丢覆盖,就先删一个文件、再对上周一次故意破坏的提交跑套件,快照没抓住它就说明本不是覆盖;快照因时间戳/随机 id 抖动就先配 serializer 剥离,确定性是价值的前提;inline 快照与格式化器打架就统一 snapshot 序列化器与 prettier 配置,格式噪声是最大抖动源且可修。

适用边界

快照捕获的是当前行为连同其中的 bug,转成断言的瞬间才是决定“什么是预期”的时机;瘦身后的套件把检测责任交回显式测试,要为编写它们留出时间。

代码示例

# Size and 3-month churn per snapshot
for f in $(git ls-files "*.snap"); do
  echo "$(wc -c < $f) $(git log --oneline --since='3 months ago' -- $f | wc -l) $f"
done | sort -rn | head -15