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
Emily Anne Brownasal
2025-03-06 02:40:08466semak imbas

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()],
        ];
    }
}

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!

Kenyataan:
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