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