Testes de Integração JavaScript com Docker: Nível Avançado

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Testes de Integração JavaScript com Docker: Nível Avançado



Testes de integração são uma etapa essencial no desenvolvimento de aplicações web modernas. Eles permitem verificar a interação entre diferentes componentes do sistema: banco de dados, cache, APIs externas e a própria aplicação. O Docker torna esse processo previsível, isolado e reproduzível. Neste artigo, exploraremos técnicas avançadas de testes de integração JavaScript (Node.js) usando Docker.



Por que usar Docker em testes de integração?

Os testes de integração tradicionais enfrentam problemas como:

  • Diferenças nos ambientes de desenvolvimento, CI e produção.
  • Poluição de dados em bancos de dados compartilhados.
  • Dificuldade em executar dependências (Redis, PostgreSQL, Kafka).

O Docker resolve esses problemas fornecendo contêineres leves e isolados. Cada teste pode iniciar sua própria infraestrutura, destruindo-a após a conclusão. Isso garante resultados limpos e reproduzíveis.



Configuração do ambiente de teste com Docker Compose

Para testes avançados, usaremos um docker-compose.yml que descreve todos os serviços necessários para os testes: a própria aplicação, banco de dados, cache e servidores mock.



Exemplo 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


Pontos-chave:

  • tmpfs: os dados do banco de dados e Redis são armazenados na memória RAM, acelerando os testes.
  • mock-server: serviço isolado para simular APIs externas.
  • NODE_ENV=test: alterna a aplicação para a configuração de teste.


Escrevendo testes de integração com Testcontainers

A biblioteca testcontainers para Node.js permite gerenciar contêineres programaticamente diretamente dos testes. Isso oferece flexibilidade: você pode iniciar contêineres específicos para cada conjunto de testes.



Instalação:

npm install --save-dev testcontainers


Exemplo de teste com PostgreSQL:

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

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

beforeAll(async () => { // Inicia o contêiner PostgreSQL container = await new GenericContainer('postgres:15-alpine') .withEnvironment({ POSTGRES_DB: 'testdb', POSTGRES_USER: 'test', POSTGRES_PASSWORD: 'test' }) .withExposedPorts(5432) .start();

// Conecta ao contêiner client = new Client({ host: container.getHost(), port: container.getMappedPort(5432), database: 'testdb', user: 'test', password: 'test' }); await client.connect();

// Cria o 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