Heim > Backend-Entwicklung > PHP-Tutorial > Verwendung eloquenter Fabriken mit Phpunit -Datenanbietern

Verwendung eloquenter Fabriken mit Phpunit -Datenanbietern

Emily Anne Brown
Freigeben: 2025-03-06 02:40:08
Original
464 Leute haben es durchsucht

Using Eloquent Factories With PHPUnit Data Providers

Es gibt verschiedene Möglichkeiten, die eloquente Fabrik in Laravel -Funktionstests zu verwenden. Wenn Sie beispielsweise das Modell für mehrere Tests verwenden möchten, können Sie während

oder direkt in einem einzigen Testfall ein Modell erstellen. Wenn Sie einen Testfall haben, der anhand verschiedener Daten getestet werden muss, müssen Sie möglicherweise das eloquente Modell und den Datenanbieter von Phpunit verwenden. setUp()

Die Verwendung von Datenanbietern in Feature -Tests kann Probleme haben, wenn sie vor dem Framework -Stiefel Laravel über

ausführen. Die Datenanbieter werden während des Laufs TestCase sehr früh analysiert. Wenn Sie sie also verwenden möchten, werden Sie auf den folgenden Fehler stoßen: setUp() phpunit

Wenn Sie den obigen Test ausführen
<?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()],
        ];
    }
}
Nach dem Login kopieren

Dies liegt daran, dass die Laravel -Anwendung noch nicht begonnen hat, wenn der Datenanbietercode ausgeführt wird! Wenn Sie ein PHP -Benutzer von Schädlingsbeschwerden sind, zeigt das Beispiel für gebundene Datensätze, wie Abschluss für Modelldaten verwendet wird:

<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>
Nach dem Login kopieren

In phpunit können wir Code über einen Datenanbieter über einen Datenanbieter übergeben, der Verschlüsse verwendet, ohne dass versuchen müssen, Daten sofort zu erstellen:

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']),
]);
Nach dem Login kopieren

Bitte beachten Sie den

Anruf, wir geben ihn an
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()],
        ];
    }
}
Nach dem Login kopieren
weiter. Wenn Sie das Modell an einem anderen Ort verwenden müssen, weisen Sie es einfach einer Variablen zu. Jetzt werden die Fabrikdaten im Test erstellt, genau das, was wir wollen! Weitere Informationen zu HTTP -Funktionstests in Laravel finden Sie in der Dokumentation.

Das obige ist der detaillierte Inhalt vonVerwendung eloquenter Fabriken mit Phpunit -Datenanbietern. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage