Pruebas de Integración de JavaScript con Docker: Nivel Avanzado

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Pruebas de Integración de JavaScript con Docker: Nivel Avanzado



Las pruebas de integración son una etapa clave en el desarrollo de aplicaciones web modernas. Permiten verificar la interacción entre diferentes componentes del sistema: la base de datos, la caché, las API externas y la propia aplicación. Docker hace que este proceso sea predecible, aislado y reproducible. En este artículo, exploraremos técnicas avanzadas de pruebas de integración de JavaScript (Node.js) utilizando Docker.



¿Por qué Docker en las pruebas de integración?

Las pruebas de integración tradicionales enfrentan problemas como:

  • Diferencias en los entornos de desarrollo, CI y producción.
  • Contaminación de datos en bases de datos compartidas.
  • Complejidad al ejecutar dependencias (Redis, PostgreSQL, Kafka).

Docker resuelve estos problemas proporcionando contenedores ligeros y aislados. Cada prueba puede ejecutar su propia infraestructura, destruyéndola al finalizar. Esto garantiza resultados limpios y repetibles.



Configuración del entorno de prueba con Docker Compose

Para pruebas avanzadas, utilizaremos un archivo docker-compose.yml que describe todos los servicios necesarios para las pruebas: la aplicación, la base de datos, la caché y los servidores mock.



Ejemplo de docker-compose.test.yml:

version: '3.8'services:  app:    build: .    environment:      - NODE_ENV=test      - DB_HOST=postgres_test      - REDIS_HOST=redis_test      - MOCK_SERVER_URL=http://mock-server:8080    depends_on:      - postgres_test      - redis_test      - mock-server    command: ["npm", "run", "test:integration"]

postgres_test: image: postgres:15-alpine environment: POSTGRES_DB: testdb POSTGRES_USER: test POSTGRES_PASSWORD: test tmpfs: /var/lib/postgresql/data

redis_test: image: redis:7-alpine tmpfs: /data

mock-server: image: mockserver/mockserver:latest environment: MOCKSERVER_LOG_LEVEL: ERROR


Puntos clave:

  • tmpfs: los datos de la BD y Redis se almacenan en memoria RAM, acelerando las pruebas.
  • mock-server: servicio aislado para simular API externas.
  • NODE_ENV=test: cambia la aplicación a la configuración de prueba.


Escribiendo pruebas de integración con Testcontainers

La librería testcontainers para Node.js permite gestionar contenedores de forma programática directamente desde las pruebas. Esto brinda flexibilidad: puedes ejecutar contenedores específicos para cada conjunto de pruebas.



Instalación:

npm install --save-dev testcontainers


Ejemplo de prueba con PostgreSQL:

const { GenericContainer } = require('testcontainers');const { Client } = require('pg');

describe('User Repository Integration Test', () => { let container; let client;

beforeAll(async () => { // Iniciamos el contenedor de PostgreSQL container = await new GenericContainer('postgres:15-alpine') .withEnvironment({ POSTGRES_DB: 'testdb', POSTGRES_USER: 'test', POSTGRES_PASSWORD: 'test' }) .withExposedPorts(5432) .start();

// Nos conectamos al contenedor client = new Client({ host: container.getHost(), port: container.getMappedPort(5432), database: 'testdb', user: 'test', password: 'test' }); await client.connect();

// Creamos el esquema await client.query(` CREATE TABLE users ( id SERIAL PRIMARY KEY, name VARCHAR(100), email VARCHAR(100) UNIQUE ) `); });

afterAll(async () => { await client.end(); await container.stop(); });

test('should insert and retrieve user', async () => { await client.query(

Blogs

Book Recommendations