Skip to main content

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 con RefreshDatabase, 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.

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, utiliza seed(). Sin argumentos ejecuta DatabaseSeeder; con argumentos, un seeder concreto (o un array de ellos).
Si quieres que todas las pruebas que usan RefreshDatabase ejecuten un seed automáticamente, añade el atributo #[Seed] a la clase base de tus tests.
Para ejecutar automáticamente un seeder específico, utiliza #[Seeder(...)].

Aserciones disponibles

Laravel ofrece un conjunto de aserciones específicas para bases de datos que puedes utilizar tanto con Pest como con PHPUnit.

assertDatabaseCount

Comprueba que el número de registros de una tabla coincide con el valor esperado.

assertDatabaseEmpty

Comprueba que la tabla está vacía.

assertDatabaseHas

Comprueba que existe un registro que cumple las condiciones indicadas.

assertDatabaseMissing

Comprueba que no existe ningún registro que cumpla las condiciones indicadas.

assertSoftDeleted

Comprueba que el modelo Eloquent indicado ha sido eliminado con soft delete.

assertNotSoftDeleted

Comprueba que el modelo Eloquent indicado no ha sido eliminado con soft delete.

assertModelExists

Comprueba que un modelo (o una colección de modelos) existe en la base de datos.

assertModelMissing

Comprueba que un modelo (o una colección de modelos) no existe en la base de datos.

expectsDatabaseQueryCount

Al comienzo de la prueba puedes especificar de forma estricta el número total de consultas a la base de datos que se deben ejecutar. Si el número real no coincide, la prueba falla.
Última modificación el 13 de julio de 2026