スナップショットテスト

スナップショットテストは、指定の期待値と、その値が以前に保存されたスナップショットを比較することで、コードをテストするための優れた方法です。これは、コードが出力を予期せず変更していないことを確認したい場合に役立ちます。

たとえば、APIから文字列レスポンスが返されるとします。スナップショットテストを使用して、レスポンスが予期せず変更されないようにすることができます。

1it('has a contact page', function () {
2 $response = $this->get('/contact');
3 
4 expect($response)->toMatchSnapshot();
5});

このテストを初めて実行すると、レスポンスコンテンツを使用してtests/.pest/snapshotsにスナップショットファイルが作成されます。テストを次回実行すると、レスポンスはスナップショットファイルと比較されます。レスポンスが異なる場合、テストは失敗します。レスポンスが同じ場合、テストは成功します。

さらに、指定された期待値はレスポンスである必要はありません。対応するものは何でもかまいません。たとえば、配列のスナップショットを作成できます

1$array = /** Fetch array somewhere */;
2 
3expect($array)->toMatchSnapshot();

そしてもちろん、--update-snapshotsオプションを使用すれば、いつでもスナップショットを「再構築」できます

1./vendor/bin/pest --update-snapshots

動的データの処理

場合によっては、フォームのCSRFトークンなど、制御できない動的データが期待値に含まれることがあります。このような場合、期待値パイプを使用してそのデータを置き換えることができます。以下に例を示します

1expect()->pipe('toMatchSnapshot', function (Closure $next) {
2 if (is_string($this->value)) {
3 $this->value = preg_replace(
4 '/name="_token" value=".*"/',
5 'name="_token" value="my_test"',
6 $this->value
7 );
8 }
9 
10 return $next();
11});

この章では、スナップショットテストがいかに強力であるかを見てきました。次の章では、Pestのカスタムヘルパーについて詳しく説明します。カスタムヘルパー