Introducción
Laravel incluye herramientas listas para probar de forma segura y rápida las funcionalidades que dependen de la base de datos. Combinando el trait de reinicio de la base de datos, las factorías de modelos, los seeders y las aserciones específicas puedes escribir pruebas robustas y difíciles de romper. Lo habitual es empezar conRefreshDatabase, que en la mayoría de los casos mantiene el aislamiento de las pruebas más rápido que un reset completo.
Reiniciar la base de datos después de cada prueba
Para que los datos de una prueba no afecten a la siguiente, utiliza el trait de reinicio de base de datos que ofrece Laravel.RefreshDatabase comprueba si el esquema está al día. Si lo está, ejecuta la prueba dentro de una transacción; si no, ejecuta primero las migraciones.
Si prefieres un reinicio completo en lugar de la vía transaccional, dispones de los siguientes traits.
| Trait | Comportamiento | Cuándo usarlo |
|---|---|---|
RefreshDatabase | Transacción si el esquema está al día; solo migra cuando es necesario | Suele ser la primera opción |
DatabaseMigrations | Ejecuta las migraciones en cada prueba | Cuando quieres pasar por el ciclo completo de migración cada vez |
DatabaseTruncation | Trunca las tablas para reiniciarlas | Cuando la transacción no es adecuada y quieres borrarlo todo |
Factorías de modelos
Para preparar datos antes de una prueba, las factorías de modelos permiten crear modelos Eloquent con muy poco código. Consulta los detalles sobre definición de factorías,state y relaciones en la sección de factorías de Eloquent.
Ejecutar seeders
Cuando necesites cargar datos durante una prueba, utilizaseed(). Sin argumentos ejecuta DatabaseSeeder; con argumentos, un seeder concreto (o un array de ellos).
RefreshDatabase ejecuten un seed automáticamente, añade el atributo #[Seed] a la clase base de tus tests.
#[Seeder(...)].