Skip to main content

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