Cómo Crear una Base de Datos de Testing en Laravel Paso a Paso
¿Estás desarrollando con Laravel y necesitas realizar pruebas sin afectar tu base de datos principal? Configurar una base de datos de testing es esencial para garantizar que tus pruebas sean seguras y efectivas. En esta guía, aprenderás cómo crear una base de datos de testing en Laravel, asegurando que tus pruebas se ejecuten en un entorno aislado y controlado.
Únete a nuestra comunidad de DiscordÍndice
Requisitos Previos para Crear la Base de Datos de Testing
Antes de crear la base de datos para pruebas, necesitas asegurarte de que tu proyecto esté preparado correctamente. Laravel usa entornos separados, y aquí configuraremos uno exclusivo para testing. Esta sección te guía para dejar todo listo y evitar errores durante la ejecución de las pruebas.
Asegúrate de Tener .env.testing
Laravel permite definir configuraciones específicas para diferentes entornos mediante archivos .env.
Para el entorno de testing, crea un archivo llamado .env.testing en la raíz de tu proyecto:
cp .env .env.testing
Este archivo contendrá la configuración específica de tu base de datos de testing, como el nombre de la base de datos, el usuario y la contraseña.
Configura la Conexión a la Base de Datos de Tests
Dentro del archivo .env.testing, configura los detalles de conexión a tu base de datos de testing. Por
ejemplo:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel_testing
DB_USERNAME=root
DB_PASSWORD=
Asegúrate de que esta base de datos sea distinta de la utilizada en desarrollo o producción.
Verifica que tu Entorno de Testing esté Separado del de Producción
Es crucial que las pruebas no afecten la base de datos de producción. Laravel activa protecciones si detecta que
estás usando el entorno production. Asegúrate de que el entorno de testing esté correctamente
configurado para evitar problemas.
Crear la Base de Datos para Testing en Laravel
Una vez definidos los archivos de entorno, es momento de crear la base de datos en sí. Esta sección te muestra cómo preparar la base de datos, ya sea manualmente o de forma automatizada, y cómo integrarla con Laravel.
Define la Base de Datos en .env.testing
Laravel utilizará automáticamente el archivo .env.testing cuando ejecutes pruebas con:
php artisan test
Esto asegura que las pruebas se ejecuten en el entorno de testing con la configuración adecuada.
Si al ejecutar las pruebas de test no se utiliza la base de datos de testing puedes “forzar” el uso de la base de datos de testing así:
php artisan test --env=testing
Crea la Base de Datos Manualmente o Automáticamente
Puedes crear la base de datos de testing manualmente utilizando herramientas como MySQL Workbench o phpMyAdmin. Alternativamente, puedes automatizar este proceso utilizando comandos personalizados de Artisan o scripts de inicialización en tu entorno de desarrollo.
Ejecuta Migraciones Solo para el Entorno de Tests
Para preparar la base de datos de testing, ejecuta las migraciones específicas para este entorno:
php artisan migrate --env=testing
Esto aplicará las migraciones definidas en tu proyecto a la base de datos de testing.
Migrar y Seedear la Base de Datos de Testing
Una base de datos vacía no es suficiente para realizar pruebas efectivas. En esta sección, veremos cómo aplicar las migraciones y poblarla con datos usando seeders o factories, todo dentro del entorno de testing.
Ejecuta php artisan migrate --env=testing
Este comando prepara tu base de datos de testing aplicando las migraciones necesarias. Asegúrate de que las migraciones estén actualizadas y reflejen la estructura actual de tu base de datos.
Añade Seeders si es Necesario
Si necesitas datos específicos para tus pruebas, puedes ejecutar los seeders en el entorno de testing:
php artisan db:seed --env=testing
Esto poblará la base de datos de testing con los datos definidos en tus seeders.
Usar RefreshDatabase o DatabaseMigrations en PHPUnit
Laravel proporciona traits como RefreshDatabase y DatabaseMigrations que facilitan la
gestión de la base de datos durante las pruebas. Por ejemplo:
use Illuminate\Foundation\Testing\RefreshDatabase;
class ExampleTest extends TestCase
{
use RefreshDatabase;
// Tus pruebas aquí
}
Estos traits aseguran que la base de datos se reinicie antes de cada prueba, manteniendo un entorno limpio y consistente.
Probar que la Base de Datos Funciona en Tests
Una vez configurada y poblada la base de datos de testing, toca verificar que Laravel la está utilizando correctamente en las pruebas. Esta sección te guía para comprobar que puedes insertar, consultar y validar datos sin afectar el entorno real.
Crea un Test con Acceso a la Base de Datos
Un ejemplo simple de prueba que interactúa con la base de datos:
public function testUserCreation()
{
User::factory()->create(['email' => '[email protected]']);
$this->assertDatabaseHas('users', ['email' => '[email protected]']);
}
Esto verifica que Laravel puede leer y escribir en la base de datos de testing.
Verifica Inserciones y Consultas Básicas
Puedes utilizar métodos como assertDatabaseMissing para asegurarte de que ciertos registros no existen:
$this->assertDatabaseMissing('users', ['email' => '[email protected]']);
Revisa que no Afecte a la Base de Datos Real
Es fundamental confirmar que las pruebas no están interactuando con la base de datos de producción. Verifica que el entorno de testing esté correctamente configurado y que las pruebas se ejecuten en la base de datos adecuada.
Solución de Problemas Comunes
Incluso con todo bien configurado, pueden surgir errores inesperados. Aquí te explico los problemas más frecuentes al trabajar con una base de datos de testing en Laravel y cómo solucionarlos de forma rápida y segura.
Laravel no Reconoce .env.testing
Asegúrate de ejecutar las pruebas con el entorno de testing:
php artisan test
// Si no funciona usa:
php artisan test --env=testing
Laravel detectará automáticamente el archivo .env.testing y aplicará la configuración correspondiente.
Error al Ejecutar Migraciones de Testing
Verifica que los detalles de conexión en .env.testing sean correctos y que el usuario de la base de
datos tenga los permisos necesarios para ejecutar migraciones.
PHPUnit no Usa la Base de Datos de Pruebas
Asegúrate de que el archivo phpunit.xml incluya la siguiente configuración:
<server name="APP_ENV" value="testing"/>
Esto indica a Laravel que utilice el entorno de testing durante la ejecución de las pruebas.
Conclusión
Configurar una base de datos de testing en Laravel es un paso esencial para garantizar que tus pruebas se ejecuten en un entorno controlado y no afecten datos reales. Al seguir los pasos descritos en esta guía, podrás establecer un entorno de testing efectivo que mejore la calidad y confiabilidad de tu aplicación.
Preguntas Frecuentes
Sí, puedes configurar SQLite en memoria para pruebas rápidas y aisladas
Sí, al ejecutar php artisan test o phpunit, Laravel utilizará automáticamente el archivo .env.testing si está presente.
Depende del tipo de prueba. Para pruebas que interactúan con la base de datos, es recomendable utilizar una base de datos real o en memoria. Para pruebas unitarias que no requieren persistencia, puedes utilizar mocks o stubs.