Configuración de Bases de Datos para Pruebas End-to-End con Docker

Clase 16 de 25Curso de End to End Testing para APIs REST con Node.js

Resumen

¿Cómo configurar un entorno de pruebas en tu aplicación?

Configurar un entorno de pruebas es crucial para asegurar que el desarrollo y las pruebas de tu aplicación no interfieran entre sí. La configuración adecuada te permite probar cambios sin arriesgar la data de producción o desarrollo. Aquí te mostramos cómo hacerlo utilizando Docker y archivos de configuración.

¿Cómo separar la base de datos de pruebas de la de desarrollo?

  • Ambiente exclusivo: Utiliza una base de datos exclusiva para pruebas. No uses la misma que para desarrollo.
  • Inyectar y borrar datos: Al finalizar una prueba, borra los datos que has inyectado automáticamente para mantener la base de datos limpia.
  • Uso de Docker:
    • Levanta un contenedor dedicado para la base de datos de pruebas.
    • Configura este contenedor mediante un archivo docker-compose.yml.

¿Cómo configurar el contenedor para la base de datos de pruebas?

Copia la configuración del contenedor de Postgres y crea uno nuevo para pruebas:

version: '3.1'

services:
  postgres_dev:
    image: postgres
    container_name: your_app_postgres_dev
    ports:
      - "5432:5432"
    environment:
      POSTGRES_USER: your_user
      POSTGRES_PASSWORD: your_password
      POSTGRES_DB: your_db

  postgres_test:
    image: postgres
    container_name: your_app_postgres_test
    ports:
      - "5433:5432"  # Cambia el puerto externo
    environment:
      POSTGRES_USER: endten
      POSTGRES_PASSWORD: endten123
      POSTGRES_DB: db_endten

¿Por qué no necesitas persistencia en la base de datos de pruebas?

  • Al ser temporal, no necesitas guardar datos entre ejecuciones.
  • Tu configuración puede inyectar datos automáticamente cada vez que se ejecutan las pruebas y resetearlos al final.

¿Cómo gestionar las variables de entorno?

Creación de un archivo .env específico para pruebas

Crea un archivo .env.endten que tenga las configuraciones específicas para tu base de datos de pruebas:

DB_HOST=localhost
DB_PORT=5433
DB_USER=endten
DB_PASSWORD=endten123
DB_NAME=db_endten

Ignorar el archivo .env en el control de versiones

Para evitar subir tus datos sensibles, asegúrate de ignorar el archivo en los sistemas de control de versiones:

.env
.env.endten

Carga dinámica de archivos según el entorno

Utiliza un diccionario en tu código para decidir qué archivo de configuración cargar según el entorno:

const envFileMapping = {
  development: '.env',
  endtoend: '.env.endten'
};

const envPath = envFileMapping[process.env.NODE_ENV] || '.env';
require('dotenv').config({ path: envPath });

Consejos para monitorear la efectividad de la configuración

Verificar contenedores activos

Asegúrate de que ambos contenedores están corriendo sin conflictos:

docker-compose ps

Realiza pruebas específicas para el entorno

Corre tus pruebas en el entorno adecuado asegurando que se conectan al puerto correcto:

NODE_ENV=endtoend npm test

Este enfoque te ayudará a tener un desarrollo más robusto y un control efectivo sobre los diferentes ambientes de la aplicación. ¡Continúa explorando y mejorando tus prácticas de desarrollo!