Rumah > pembangunan bahagian belakang > tutorial php > Menggunakan kilang -kilang yang fasih dengan penyedia data phpunit

Menggunakan kilang -kilang yang fasih dengan penyedia data phpunit

Emily Anne Brown
Lepaskan: 2025-03-06 02:40:08
asal
464 orang telah melayarinya

Using Eloquent Factories With PHPUnit Data Providers 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

atau secara langsung dalam satu kes ujian. Jika anda mempunyai kes ujian yang perlu diuji terhadap pelbagai data, anda mungkin perlu menggunakan model fasih dan penyedia data phpunit.

setUp() Menggunakan penyedia data dalam ujian ciri mungkin mempunyai masalah seperti yang mereka jalankan sebelum kerangka

Boots Laravel melalui

. Penyedia data dihuraikan awal semasa larian TestCase, jadi jika anda mahu menggunakannya, anda akan menghadapi ralat berikut: setUp() phpunit

Semasa menjalankan ujian di atas, anda harus mendapat kesilapan seperti yang berikut, bergantung pada versi Laravel yang anda gunakan - di sini adalah ralat yang saya dapatkan di Laravel 11:
<?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()],
        ];
    }
}
Salin selepas log masuk

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>
Salin selepas log masuk

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']),
]);
Salin selepas log masuk

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()],
        ];
    }
}
Salin selepas log masuk
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!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan