Testes de Integração JavaScript com Docker: Guia Completo

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: Do A ao Z

\n\n

No desenvolvimento web moderno, a qualidade do código não é apenas uma métrica, mas a chave para a estabilidade do produto. O Teste de Integração (Integration Testing) ocupa um lugar fundamental na pirâmide de testes, permitindo verificar a interação entre diferentes módulos, bancos de dados, APIs externas e serviços. No entanto, configurar ambientes isolados e reproduzíveis para esses testes muitas vezes se torna uma dor de cabeça. É aqui que o Docker entra em cena — uma ferramenta de conteinerização ideal para criar ambientes de teste limpos e repetíveis.

\n\n

Neste artigo, vamos abordar como organizar testes de integração para aplicações JavaScript (Node.js) usando Docker. Você aprenderá como subir um banco de dados de teste, iniciar dependências em contêineres e escrever testes eficientes que podem ser facilmente integrados em um pipeline de CI/CD.

\n\n

1. Por que o Docker é ideal para testes de integração?

\n\n

A abordagem tradicional para testes de integração frequentemente exige a configuração manual do ambiente em cada máquina de desenvolvedor ou servidor de CI. Isso leva ao problema "funciona na minha máquina". O Docker resolve esse problema de forma radical:

\n\n
    \n
  • Isolamento: Cada teste é executado em um contêiner limpo, eliminando a influência de efeitos colaterais de execuções anteriores.
  • \n
  • Reprodutibilidade: O mesmo ambiente (versão do Node.js, bancos de dados, bibliotecas do sistema) funciona garantidamente em qualquer lugar: na máquina local do desenvolvedor, no servidor de build e em produção.
  • \n
  • Gerenciamento de dependências: Você pode facilmente subir infraestruturas complexas (Redis, PostgreSQL, RabbitMQ) com um único comando docker-compose up -d.
  • \n
  • Velocidade: Os contêineres são iniciados em segundos, ao contrário das máquinas virtuais. O Docker armazena camadas em cache, acelerando builds repetidos.
  • \n
\n\n

No contexto do Node.js, o Docker permite "simular" serviços externos sem sair do ambiente de desenvolvimento. Em vez de acessar uma API de produção, você sobe um contêiner de teste com, por exemplo, json-server ou testcontainers.

\n\n

2. Configuração do projeto Node.js para testes

\n\n

Suponha que temos uma aplicação Express simples que salva usuários no PostgreSQL. Nossa tarefa é testar o endpoint POST /users.

\n\n

Estrutura do projeto:

\n
\nproject/\n├── src/\n│   ├── app.js\n│   ├── db.js\n│   └── routes/\n│       └── users.js\n├── test/\n│   └── integration/\n│       └── users.test.js\n├── docker-compose.test.yml\n├── Dockerfile\n├── package.json\n└── .env.test\n
\n\n

Para os testes, usaremos um stack popular: Mocha (framework) + Chai (biblioteca de asserções) + Supertest (teste HTTP).

\n\n

Instale as dependências:

\n
npm install --save-dev mocha chai supertest
\n\n

O arquivo package.json deve conter um script para executar os testes:

\n
{\n  "scripts": {\n    "test:integration": "mocha test/integration/**/*.test.js --timeout 10000"\n  }\n}
\n\n

3. Criação do ambiente Docker para testes

\n\n

O arquivo chave é o docker-compose.test.yml. Ele descreve os serviços necessários para os testes.

\n\n
version: '3.8'\n\nservices:\n  app-test:\n    build:\n      context: .\n      dockerfile: Dockerfile\n    environment:\n      - NODE_ENV=test\n      - DB_HOST=postgres-test\n      - DB_PORT=5432\n      - DB_USER=test_user\n      - DB_PASSWORD=test_pass\n      - DB_NAME=test_db\n    depends_on:\n      postgres-test:\n        condition: service_healthy\n    command: ["npm", "run", "test:integration"]\n\n  postgres-test:\n    image: postgres:15-alpine\n    environment:\n      POSTGRES_USER: test_user\n      POSTGRES_PASSWORD: test_                

Blogs

Book Recommendations