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.
| Trait | Comportamento | Quando usarlo |
|---|---|---|
RefreshDatabase | Transazione se lo schema è aggiornato; migration solo quando serve | Prima scelta di default |
DatabaseMigrations | Esegue le migration a ogni test | Se vuoi passare per l’intero ciclo di migration ogni volta |
DatabaseTruncation | Fa TRUNCATE delle tabelle | Se le transazioni non sono adatte al tuo ambiente e vuoi svuotare tutto |
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 usaseed(). Senza argomenti esegue DatabaseSeeder; con un argomento esegue un seeder specifico (o un array).
RefreshDatabase, aggiungi l’attribute #[Seed] alla classe base di test.
#[Seeder(...)].