快照測試
快照測試是一種透過比對給定的預期值與之前儲存的相同值快照,來測試程式碼的絕佳方式。當您想確保程式碼沒有意外改變其輸出時,這很有用。
例如,假設您有一個來自 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 的自訂輔助函式:自訂輔助函式