自訂輔助函式

如果您正在轉換為撰寫測試的功能性方法,您可能會想知道在 Pest 中,您用於測試類別中受保護或私有方法的輔助函式該放在哪。使用 Pest 時,這些輔助方法應轉換為簡單函式。

例如,如果您的輔助函式專屬於某個測試檔案,您可以在測試檔案中直接建立輔助函式。在輔助函式中,您可以呼叫 test() 函式來存取通常可透過 $this 存取的測試類別實體。

1use App\Models\User;
2use Tests\TestCase;
3 
4function asAdmin(): TestCase
5{
6 $user = User::factory()->create([
7 'admin' => true,
8 ]);
9 
10 return test()->actingAs($user);
11}
12 
13it('can manage users', function () {
14 asAdmin()->get('/users')->assertOk();
15})

注意:如果您的輔助函式建立自訂預期,則您應該撰寫專門的 自訂預期

如果您的測試輔助函式在整個測試組件中使用,您可以在 tests/Pest.phptests/Helpers.php 檔案中定義它們。或者,您可以建立一個 tests/Helpers 目錄來存放您自己的輔助函式檔案。這些選項會由 Pest 自動載入。

1use App\Clients\PaymentClient;
2use Mockery;
3 
4// tests/Pest.php or tests/Helpers.php
5function mockPayments(): object
6{
7 $client = Mockery::mock(PaymentClient::class);
8 
9 //
10 
11 return $client;
12}
13 
14// tests/Feature/PaymentsTest.php
15it('may buy a book', function () {
16 $client = mockPayments();
17 
18 //
19})

除了將輔助方法定義為函式外,您還可以在基本測試類別中定義受保護方法,並使用 $this 變數在測試案例中存取它們。

1use App\Clients\PaymentClient;
2use PHPUnit\Framework\TestCase as BaseTestCase;
3use Mockery;
4 
5// tests/TestCase.php
6class TestCase extends BaseTestCase
7{
8 protected function mockPayments(): void
9 {
10 $client = Mockery::mock(PaymentClient::class);
11 
12 //
13 
14 return $client;
15 }
16}
17 
18// tests/Pest.php
19pest()->extend(TestCase::class)->in('Feature');
20 
21// tests/Feature/PaymentsTest.php
22it('may buy a book', function () {
23 $client = $this->mockPayments();
24 
25 //
26})

在本節中,我們探討了如何建立自訂輔助函式。深入探究,您可能還想產生自訂預期。讓我們在下一章深入探討這個主題:自訂預期