Pest 的夏季辣味版本
「夏季辣味」是指定給 Pest 2.9 的代號。
在 2023 年 3 月 20 日,我們自豪地介紹了 Pest 2.0,標誌著它是迄今為止最重要的版本,在撰寫本文時已下載超過 700 萬次。此版本展示了一個非凡的架構外掛、平行測試中提升 80% 的速度、設定檔選項以及許多其他功能。
隨著夏季的到來,我們很興奮地宣佈即將推出的版本:備受期待的「夏季辣味」版本。此版本帶來了許多令人興奮的功能,會讓它感覺就像是一個重大版本,雖然實際上並非如此 - 它是 Pest v2.9.0 - 因此透過「composer update」就能取得它。話不多說,讓我們來看看我們為今年夏天準備了什麼
- 內建快照測試,讓您可以輕鬆測試代碼的長輸出
- 描述區塊,用於群組測試並分享設定和終止邏輯
- 架構測試++,更強大的架構測試
- 類型涵蓋率外掛,用於測量由類型宣告涵蓋的程式碼百分比
- 偏離外掛,自動將您的 PHPUnit 測試轉換成 Pest
內建快照測試
在這裡閱讀完整文件:pestphp.com/docs/snapshot-testing
快照測試是一種測試技術,可用於斷言函數或方法的輸出沒有變更。這是一種測試程式碼庫並確保您的程式碼沒有意外變更的好方法。
現在,我們很自豪地宣佈 Pest 將有內建的快照測試支援。舉例來說,假設每次執行「聯絡人」端點時,都會輸出特定的 HTML。您可能會撰寫像這樣的測試
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
描述區塊
自從我們發布 Pest 之後,描述區塊一直是最受請求的功能之一。它們是任何「功能」測試框架的基本,因為它們允許您對測試進行分組並共用設定和終止邏輯。
1beforeEach(fn () => $this->user = User::factory()->create()); 2 3describe('auth', function () { 4 beforeEach(fn () => $this->actingAs($this->user)); 5 6 test('cannot login when already logged in', function () { 7 // ... 8 }); 9 10 test('can logout', function () {11 // ...12 });13})->skip(/* Skip the entire describe block */);14 15describe('guest', function () {16 test('can login', function () {17 // ...18 });19 20 // ...21});
架構測試 + +
在這裡閱讀完整文件:pestphp.com/docs/arch-testing
Pest 一直致力於讓測試更令人愉快。上一個版本中,我們引入了架構期望,讓您可以測試程式碼庫的架構。在此版本中,我們很榮幸地宣布 Pest 已透過新增其他架構期望改良了架構期望。
1test('controllers')2 ->expect('App\Http\Controllers')3 ->toUseStrictTypes()4 ->toHaveSuffix('Controller') // or toHavePreffix, ...5 ->toBeReadonly()6 ->toBeClasses() // or toBeInterfaces, toBeTraits, ...7 ->classes->not->toBeFinal() // 🌶8 ->classes->toExtendNothing() // or toExtend(Controller::class),9 ->classes->toImplementNothing() // or toImplement(ShouldQueue::class),
型別涵蓋範圍外掛程式
在這裡閱讀完整文件:pestphp.com/docs/type-coverage

您可能知道,Pest 提供 `--coverage` 旗標,讓您可以在終端機上產生華麗的涵蓋範圍報告。此報告會顯示您的測試涵蓋程式碼的哪些行。這是確保您的測試涵蓋所有程式碼的好方法。
針對這一點,我們很自豪地宣布 Pest 現在內建型別涵蓋範圍支援。這表示您現在可以看到您的原始碼是否已在所有可能的地方使用「型別」。例如,假設您有一個儲存庫,其中有以下方法
1public function find($id)2{3 return User::find($id);4}
此方法缺少一個參數型別和一個回傳型別。因此,如果您執行 `pest --type-coverage`,您會看到以下輸出,並知道您需要針對此方法新增型別
1...2app/Models\User.php .......................................... 100%3app/Repositories/UserRepository.php .................. pa8, rt8 33%4───────────────────────────────────────────────────────────────────5Total: 91.6 %
此外,就像一般涵蓋範圍一樣,您可以強制執行 `--min` 型別涵蓋範圍百分比。例如,如果您執行 `--type-coverage --min=100`,您會看到以下輸出
1...2app/Models\User.php .......................................................... 100%3app/Repositories/UserRepository.php .................................. pa8, rt8 33%4───────────────────────────────────────────────────────────────────────────────────5 Total: 91.6 %6 ERROR Type coverage below expected: 91.6%. Minimum: 100.0%
漂移外掛程式
是的,沒錯。我們很榮幸地宣布 Pest 現在將擁有類似於 Laravel shift 的工具,稱作 Drift。Drift 將允許您在幾秒鐘內將 PHPUnit 測試升級為 Pest 測試。
因此,如果您有類似這樣的測試
1<?php 2 3namespace Tests\Unit; 4 5use PHPUnit\Framework\TestCase; 6 7class ExampleTest extends TestCase 8{ 9 public function test_that_true_is_true(): void10 {11 $this->assertTrue(true);12 }13}
您可以執行 `./vendor/bin/pest --drift`,而且 Pest 會自動將您的 PHPUnit 測試轉換為 Pest 測試
1 2 3test('true is true', function () {4 expect(true)->toBeTrue();5});
感謝您閱讀 Pest 2.9 的新功能!如果您正在考慮為您的下一個專案尋找測試框架,以下就是您應該試用 Pest 的原因:為何選擇 Pest →