自定义助手
如果您正在转向函数式方法来编写测试,您可能会想知道在哪里放置以前在测试类中受保护或私有的助手方法。使用 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})
在本节中,我们探讨了创建自定义助手的过程。深入了解,您甚至可能想要生成一个自定义断言。让我们在下一章跳转到该主题:自定义断言