快照測試

快照測試是一種透過比對給定的預期值與之前儲存的相同值快照,來測試程式碼的絕佳方式。當您想確保程式碼沒有意外改變其輸出時,這很有用。

例如,假設您有一個來自 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 的自訂輔助函式:自訂輔助函式