Cómo crear una base de datos de testing en Laravel - Guía

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

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.

Nosotros utilizamos cookies

Este sitio utiliza cookies para mejorar su experiencia de usuario.

Puedes aceptar todas las cookies pulsando en el botón de "Aceptar todas", rechazar todas las cookies pulsando el botón de "Rechazar cookies" o configurar manualmente usando el botón de "más opciones"

Para más información visita nuestra Política de cookies

Personaliza las Cookies

Estas cookies son necesarias para que el sitio web funcione y no se pueden desactivar en nuestros sistemas. Usualmente están configuradas para responder a acciones hechas por tí para recibir servicios, tales como ajustar tus preferencias de privacidad, iniciar sesión en el sitio, o llenar formularios. Puedes configurar tu navegador para bloquear o alertar la presencia de estas cookies, pero algunas partes del sitio web no funcionarán. Estas cookies no guardan ninguna información personal identificable.

Estas cookies nos permiten contar las visitas y fuentes de circulación para poder medir y mejorar el desempeño de nuestro sitio. Nos ayudan a saber qué páginas son las más o menos populares, y ver cuántas personas visitan el sitio. Toda la información que recogen estas cookies es agregada y, por lo tanto, anónima.