【スナップショットテスト】

スナップショットテスト とは?

最終更新:
💡 保存した出力と今の出力を比べ、変更を見つける

出力を基準となる記録として保存し、後の実行結果と比較して差分を検知するテスト手法。Jestのテキストによる比較や、画面画像の比較などがある。

📌 このページのポイント
保存した基準と、今の出力を比較 保存した基準 人が内容を確認 例:JSONの記録 今の出力 同じ条件で実行 例:JSONの出力 比較 一致:通過 差分:確認 意図した変更か確認してから基準を更新
Jestのテキスト比較の例。初回に保存した出力もレビューする。画像を比べる方式もあるが、記録した範囲を超えて正しさを保証するものではない。
ひよこ ひよこ
スナップショットテストって、写真を撮るの?
ペンギン先生 ペンギン先生
保存した基準と今の出力を比べる考え方だよ。Jestではコンポーネントの出力やJSONなどを読みやすいテキストにして保存する。一方、Playwrightには画面の画像を保存して比べる機能もあるんだ
ひよこ ひよこ
最初の記録はどう作るの?
ペンギン先生 ペンギン先生
Jestの通常の実行では、toMatchSnapshot()で基準がないと.snapファイルを生成するよ。ただし、その出力が正しいかは人が確認する必要がある。CIでは通常、新しい基準を自動で作って通過させないんだ
ひよこ ひよこ
2回目以降はどうなるの?
ペンギン先生 ペンギン先生
保存した基準と一致すれば通過し、差分があれば失敗する。バグなら実装を直し、意図した変更なら差分を確認して--updateSnapshotなどで基準を更新するよ。基準の記録もテストと一緒にコミットしてレビューするんだ
ひよこ ひよこ
毎回更新してもいい?
ペンギン先生 ペンギン先生
差分を見ずに更新すると、バグの出力まで新しい基準にしてしまうよ。時刻や乱数が毎回変わる場合は、テスト用の値に固定するなどして、確認したい変更を見つけやすくしよう。記録も短く、目的を絞ると読みやすいね
ひよこ ひよこ
これだけで見た目も全部確認できる?
ペンギン先生 ペンギン先生
Jestのテキスト比較で確認できるのは記録した出力の範囲だよ。CSSや画像の見た目、ユーザーの操作全体まで保証するものではない。画像比較なら表示の差分も扱えるけれど、OSやブラウザなどの実行環境をそろえることも大切なんだ
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「スナップショットテスト」って出てきたら「保存した出力と比較して変化を見つけるテスト」と思えればだいたいOK!
📖 おまけ:英語の意味
「Snapshot Testing」 = スナップショットテスト
💬 Snapshot(スナップショット)は「瞬間を切り取った写真」という意味だよ。ある時点の出力を保存しておいて、あとで比較するのが由来なんだ。

参考資料

← 用語集にもどる