【スナップショットテスト】
スナップショットテスト とは?
最終更新:
💡 保存した出力と今の出力を比べ、変更を見つける
出力を基準となる記録として保存し、後の実行結果と比較して差分を検知するテスト手法。Jestのテキストによる比較や、画面画像の比較などがある。
📌 このページのポイント
- Jestではシリアライズできる出力をtoMatchSnapshot()で比較できる
- 初回に保存した出力も人が確認する。自動生成は正しさの証明ではない
- 意図した変更と確認してから基準を更新し、テストと一緒に管理する
- 記録した範囲だけを検査する。時刻や乱数などで差分が出続けない工夫も必要
スナップショットテストって、写真を撮るの?
最初の記録はどう作るの?
Jestの通常の実行では、toMatchSnapshot()で基準がないと.snapファイルを生成するよ。ただし、その出力が正しいかは人が確認する必要がある。CIでは通常、新しい基準を自動で作って通過させないんだ
2回目以降はどうなるの?
保存した基準と一致すれば通過し、差分があれば失敗する。バグなら実装を直し、意図した変更なら差分を確認して--updateSnapshotなどで基準を更新するよ。基準の記録もテストと一緒にコミットしてレビューするんだ
毎回更新してもいい?
差分を見ずに更新すると、バグの出力まで新しい基準にしてしまうよ。時刻や乱数が毎回変わる場合は、テスト用の値に固定するなどして、確認したい変更を見つけやすくしよう。記録も短く、目的を絞ると読みやすいね
これだけで見た目も全部確認できる?
まとめ:ざっくりこれだけ覚えればOK!
「スナップショットテスト」って出てきたら「保存した出力と比較して変化を見つけるテスト」と思えればだいたいOK!
📖 おまけ:英語の意味
「Snapshot Testing」 = スナップショットテスト
💬 Snapshot(スナップショット)は「瞬間を切り取った写真」という意味だよ。ある時点の出力を保存しておいて、あとで比較するのが由来なんだ。