Skip to main content

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 sich RefreshDatabase. 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.

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 Sie seed(). Ohne Argument wird der DatabaseSeeder ausgeführt; mit Argument ein bestimmter Seeder (oder ein Array von Seedern).
Um bei jedem Test, der RefreshDatabase verwendet, automatisch zu seeden, versehen Sie die Basis-Testklasse mit dem Attribut #[Seed].
Um automatisch nur bestimmte Seeder auszuführen, verwenden Sie #[Seeder(...)].

Verfügbare Assertions

Laravel bringt spezielle Datenbank-Assertions mit, die sowohl mit Pest als auch mit PHPUnit funktionieren.

assertDatabaseCount

Prüft, dass die Anzahl der Datensätze in einer Tabelle dem erwarteten Wert entspricht.

assertDatabaseEmpty

Prüft, dass eine Tabelle leer ist.

assertDatabaseHas

Prüft, dass ein Datensatz existiert, der den angegebenen Kriterien entspricht.

assertDatabaseMissing

Prüft, dass kein Datensatz existiert, der den angegebenen Kriterien entspricht.

assertSoftDeleted

Prüft, dass das angegebene Eloquent-Modell soft-deleted ist.

assertNotSoftDeleted

Prüft, dass das angegebene Eloquent-Modell nicht soft-deleted ist.

assertModelExists

Prüft, dass das angegebene Modell (oder eine Model-Collection) in der Datenbank vorhanden ist.

assertModelMissing

Prüft, dass das angegebene Modell (oder eine Model-Collection) in der Datenbank nicht vorhanden ist.

expectsDatabaseQueryCount

Legen Sie zu Beginn eines Tests die exakte Anzahl der zu erwartenden Datenbankabfragen fest. Weicht die tatsächliche Zahl ab, schlägt der Test fehl.
Zuletzt geändert am 13. Juli 2026