Rumah >pembangunan bahagian belakang >tutorial php >Menggunakan kilang -kilang yang fasih dengan penyedia data phpunit
Terdapat beberapa cara untuk menggunakan kilang fasih dalam ujian ciri Laravel, contohnya, apabila anda ingin menggunakan model untuk ujian berganda, anda boleh membuat model semasa
setUp()
Menggunakan penyedia data dalam ujian ciri mungkin mempunyai masalah seperti yang mereka jalankan sebelum kerangka
. Penyedia data dihuraikan awal semasa larian TestCase
, jadi jika anda mahu menggunakannya, anda akan menghadapi ralat berikut: setUp()
phpunit
<?php namespace Tests\Feature; use App\Models\User; use Illuminate\Foundation\Testing\RefreshDatabase; use PHPUnit\Framework\Attributes\DataProvider; use Tests\TestCase; class ExampleTest extends TestCase { use RefreshDatabase; #[DataProvider('nonAdminUsers')] public function test_non_admin_users_cannot_access_admin($user): void { $response = $this ->actingAs($user()) ->get('/admin') ->assertStatus(403); } public static function nonAdminUsers(): array { return [ [User::factory()->player()->create()], [User::factory()->coach()->create()], [User::factory()->owner()->create()], ]; } }
Ini kerana apabila kod pembekal data sedang berjalan, aplikasi Laravel belum dimulakan lagi! Jika anda adalah pengguna PHP PEST, contoh dataset terikat menunjukkan cara menggunakan penutupan data model:
<code>$ vendor/bin/phpunit tests/Feature/ExampleTest.php There was 1 PHPUnit error: 1) Tests\Feature\ExampleTest::test_non_admin_users_cannot_access_admin The data provider specified for Tests\Feature\ExampleTest::test_non_admin_users_cannot_access_admin is invalid A facade root has not been set. tests/Feature/ExampleTest.php:18</code>
Dalam phpunit, kami boleh lulus kod ke ujian kami melalui pembekal data menggunakan penutupan tanpa perlu membuat data dengan segera:
it('can generate the full name of a user', function (User $user) { expect($user->full_name)->toBe("{$user->first_name} {$user->last_name}"); })->with([ fn() => User::factory()->create(['first_name' => 'Nuno', 'last_name' => 'Maduro']), fn() => User::factory()->create(['first_name' => 'Luke', 'last_name' => 'Downing']), fn() => User::factory()->create(['first_name' => 'Freek', 'last_name' => 'Van Der Herten']), ]);
Sila ambil perhatian
namespace Tests\Feature; use App\Models\User; use Illuminate\Foundation\Testing\RefreshDatabase; use PHPUnit\Framework\Attributes\DataProvider; use Tests\TestCase; class ExampleTest extends TestCase { use RefreshDatabase; #[DataProvider('nonAdminUsers')] public function test_non_admin_users_cannot_access_admin($user): void { $response = $this ->actingAs($user()) ->get('/admin') ->assertStatus(403); } public static function nonAdminUsers(): array { return [ [fn(): User => User::factory()->player()->create()], [fn(): User => User::factory()->coach()->create()], [fn(): User => User::factory()->owner()->create()], ]; } }panggilan, kami lulus ke
. Sekiranya anda perlu menggunakan model di tempat yang berbeza, berikannya kepada pembolehubah. Sekarang, data kilang dibuat dalam ujian, yang betul -betul apa yang kita mahu! Untuk mengetahui lebih lanjut mengenai ujian ciri HTTP di Laravel, lihat dokumentasi. $user()
Atas ialah kandungan terperinci Menggunakan kilang -kilang yang fasih dengan penyedia data phpunit. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!