Introduzione
Laravel include di serie i meccanismi per testare in modo sicuro e veloce le funzionalità che usano il database. Combinando i trait per il reset del database, le model factory, i seeder e le asserzioni dedicate crei test difficili da rompere.
Il punto di partenza è RefreshDatabase. Nella maggior parte dei casi mantiene l’indipendenza dei test più rapidamente di un reset completo.
Reset del database dopo ogni test
Per evitare che i dati di un test influenzino il successivo, usa i trait di reset del database.
RefreshDatabase verifica se lo schema è aggiornato. Se lo è, esegue il test in una transazione; se no, esegue prima le migration.
Se preferisci un reset completo ogni volta anziché la transazione, usa questi trait.
Model factory
Per preparare dati prima di un test, con le model factory generi modelli Eloquent in modo conciso.
Per dettagli su definizioni, state e relazioni consulta Factory Eloquent.
Esecuzione dei seeder
Per inserire dati durante il test usa seed(). Senza argomenti esegue DatabaseSeeder; con un argomento esegue un seeder specifico (o un array).
Per seedare automaticamente in tutti i test che usano RefreshDatabase, aggiungi l’attribute #[Seed] alla classe base di test.
Per eseguire automaticamente solo alcuni seeder usa #[Seeder(...)].
Asserzioni disponibili
Laravel offre asserzioni dedicate al database utilizzabili sia in Pest sia in PHPUnit.
assertDatabaseCount
Verifica che il numero di record nella tabella corrisponda al valore atteso.
assertDatabaseEmpty
Verifica che la tabella sia vuota.
assertDatabaseHas
Verifica che esistano record che corrispondono alle condizioni.
assertDatabaseMissing
Verifica che non esistano record che corrispondono alle condizioni.
assertSoftDeleted
Verifica che il modello Eloquent sia soft deleted.
assertNotSoftDeleted
Verifica che il modello Eloquent non sia soft deleted.
assertModelExists
Verifica che il modello (o la collection di modelli) indicato esista nel DB.
assertModelMissing
Verifica che il modello (o la collection di modelli) non esista nel DB.
expectsDatabaseQueryCount
All’inizio del test indica il numero totale di query attese. Se il numero effettivo non corrisponde il test fallisce.
Ultima modifica il 13 luglio 2026