撰寫測試

在這個章節中,我們將簡要概述如何撰寫 Pest 的測試。在成功安裝 Pest後,你將在專案中找到下列的檔案和資料夾

1├── 📂 tests
2│ ├── 📂 Unit
3│ │ └── ExampleTest.php
4│ └── 📂 Feature
5│ │ └── ExampleTest.php
6│ └── TestCase.php
7│ └── Pest.php
8├── phpunit.xml

tests 資料夾用來作為主目錄,所有你的測試檔案都將儲存在此處。在這個資料夾內,你將找到兩個子資料夾,UnitFeature,分別放置你的單元測試和功能測試。TestCase.php 檔案是讓你定義你想要在所有測試中都使用的共用功能或設定的地方。最後,Pest.php 檔案是你設定你的測試套件的地方。

此外,可以在你的專案根目錄找到一個 phpunit.xml 檔案,這個檔案用來設定 PHPUnit 在執行測試時的各種選項。值得注意的是,Pest 建立在 PHPUnit 之上,這表示 PHPUnit 提供的所有選項也可以在 Pest 中使用。因此,你使用 phpunit.xml 的任何自訂或設定也將適用於 Pest 測試。

當你開始撰寫專案的測試時,重要的是要考慮如何建立和有效管理你的測試檔案。通常,測試檔案的字尾為 Test.php,例如 ExampleTest.php

你的第一個測試

對於我們的測試,讓我們撰寫一些簡單的東西。假設你的專案有一個名為 sum 的全球函式,可以將兩個數字加起來。若要測試這個函式,你可以在 Tests\Unit\SumTest.php 檔案中撰寫以下程式碼。

1test('sum', function () {
2 $result = sum(1, 2);
3 
4 expect($result)->toBe(3);
5});

在撰寫你的測試程式碼後,是時候使用 Pest 執行你的測試了。當你執行 ./vendor/bin/pest 指令時,Pest 將會顯示一則訊息來指出你的測試成功或失敗。

除了 test() 函式,Pest 還提供了方便的 it() 函式,它只會在測試描述前面加上「it」這個字,讓你的測試更容易閱讀。

1it('performs sums', function () {
2 $result = sum(1, 2);
3 
4 expect($result)->toBe(3);
5});

在這個案例中,當你執行 ./vendor/bin/pest 指令時,輸出的內容將包括「it Performs Sums」的描述,以及測試結果。

最後,你也可以使用 describe() 函式將相關的測試群組在一起。例如,你可以使用 describe() 函式將所有與 sum() 函式相關的測試群組在一起。

1describe('sum', function () {
2 it('may sum integers', function () {
3 $result = sum(1, 2);
4 
5 expect($result)->toBe(3);
6 });
7 
8 it('may sum floats', function () {
9 $result = sum(1.5, 2.5);
10 
11 expect($result)->toBe(4.0);
12 });
13});

當你執行 ./vendor/bin/pest 指令時,輸出的內容將包括「sum performs sums」的描述,以及測試結果。

期望 API

如您在前面範例中注意到的,我們利用 Pest 的預期 API 在我們測試程式碼中執行驗證。expect() 函式是預期 API 的核心,且用於確認是否符合特定條件。

舉例而言,在我們前面的範例中,我們使用 expect($result)->toBe(3) 來確保 $result 的值等於 3。Pest 的預期 API 提供了許多其他驗證函式,您可以使用來測試您的程式碼行為,例如 toBeTrue()toBeFalse()toContain()

透過使用預期 API,您可以撰寫簡潔且易讀的驗證,明確表示您的程式碼在做什麼以及它應如何執行。在 下一節 中,我們將涵蓋 Pest 預期 API 中一些最常使用的驗證函式。

驗證 API

雖然 Pest 的預期 API 提供了方便的方法來執行驗證,但它並非唯一可用的選項。您也可以使用 PHPUnit 的驗證 API,如果您已熟悉 PHPUnit 的驗證 API 或者您需要執行在 Pest 的驗證 API 中無法進行的更複雜的驗證,這會很有用。

1test('sum', function () {
2 $result = sum(1, 2);
3 
4 $this->assertSame(3, $result); // Same as expect($result)->toBe(3)
5});

您可以在 PHPUnit 網站上找到 PHPUnit 驗證 API 的完整文件:docs.phpunit.de/en/11.3/assertions.html


繼續我們的下一節,以取得更多有關如何使用預期 API 的資訊:預期 →