自訂輔助函式
如果您正在轉換為撰寫測試的功能性方法,您可能會想知道在 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.php
或 tests/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.php15it('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.php19pest()->extend(TestCase::class)->in('Feature');20 21// tests/Feature/PaymentsTest.php22it('may buy a book', function () {23 $client = $this->mockPayments();24 25 //26})
在本節中,我們探討了如何建立自訂輔助函式。深入探究,您可能還想產生自訂預期。讓我們在下一章深入探討這個主題:自訂預期