Einführung
Laravel bringt Werkzeuge mit, um Funktionen, die eine Datenbank nutzen, sicher und schnell zu prüfen. Traits zum Zurücksetzen der Datenbank, Model-Factories, Seeder und spezielle Assertions ergeben zusammen widerstandsfähige Tests. Als Ausgangspunkt empfiehlt sichRefreshDatabase. In vielen Fällen wahrt es die Isolation zwischen Tests schneller als ein kompletter Reset.
Datenbank nach jedem Test zurücksetzen
Damit Testdaten aus einem Test nicht in den nächsten hineinwirken, verwenden Sie die Traits von Laravel zum Zurücksetzen der Datenbank.RefreshDatabase erkennt, ob das Schema aktuell ist. Ist es aktuell, führt es die Tests in einer Transaktion aus; ist es nicht aktuell, werden zuvor die Migrationen ausgeführt.
Wenn Sie keine Transaktion nutzen, sondern bei jedem Test wirklich alles zurücksetzen möchten, stehen weitere Traits zur Verfügung.
| Trait | Verhalten | Wann verwenden |
|---|---|---|
RefreshDatabase | Transaktion bei aktuellem Schema; Migrationen nur bei Bedarf | Der übliche Standard |
DatabaseMigrations | Führt bei jedem Test Migrationen aus | Wenn Sie den Migrationslebenszyklus jedes Mal durchlaufen möchten |
DatabaseTruncation | Initialisiert Tabellen per TRUNCATE | Wenn Transaktionen nicht in Frage kommen und Sie alles leeren möchten |
Model-Factories
Zum Anlegen von Testdaten sind Model-Factories die kompakteste Möglichkeit, Eloquent-Modelle zu erzeugen. Details zu Factory-Definitionen, States und Relations finden Sie unter Eloquent-Factories.Seeder ausführen
Möchten Sie während eines Tests Daten einspielen, verwenden Sieseed(). Ohne Argument wird der DatabaseSeeder ausgeführt; mit Argument ein bestimmter Seeder (oder ein Array von Seedern).
RefreshDatabase verwendet, automatisch zu seeden, versehen Sie die Basis-Testklasse mit dem Attribut #[Seed].
#[Seeder(...)].