3
respostas

Para fazer os testes é bom ter um banco próprio?

Para fazer os testes de integração é bom ter um banco próprio? Isso vale para os testes unitários e de integração que são feitos no ambiente do desenvolverdor e também para os testes E2E ou só para o ambiente de desenvolvimento? Ou os testes unitários e de integração não são feitos no ambiente de desenvolvimento? Se os testes E2E é feito no ambiente de teste e os testes unitários e de integração são feitos no ambiente do desenvolvedor eles compartilham o mesmo banco?

3 respostas

Olá, Luidi! Como vai?

Para responder à sua dúvida, vamos falar sobre a utilização de bancos de dados nos testes de integração e E2E (end-to-end).

  1. Testes de Integração: É uma boa prática ter um banco de dados próprio para testes de integração. Isso porque esses testes verificam como diferentes partes do sistema funcionam juntas, e muitas vezes envolvem operações reais de leitura e escrita no banco de dados. Ter um banco de dados separado para testes ajuda a garantir que os dados de desenvolvimento ou produção não sejam afetados. Além disso, isso permite que você crie um ambiente controlado, com dados específicos para testar diferentes cenários.

  2. Testes Unitários: Normalmente, testes unitários não requerem um banco de dados real. Eles são projetados para testar pequenas partes do código de forma isolada, e geralmente usam mocks ou stubs para simular interações com o banco de dados.

  3. Testes E2E: Esses testes simulam o comportamento do usuário final e, por isso, são geralmente executados em um ambiente de teste que imita o mais próximo possível o ambiente de produção. Isso pode incluir o uso de um banco de dados próprio para garantir que os testes não interfiram com dados reais.

Em resumo, para testes de integração e E2E, é recomendado ter um banco de dados separado para garantir que os testes sejam realizados em um ambiente controlado e seguro. Já para testes unitários, geralmente não é necessário um banco de dados real, pois eles focam em testar funcionalidades específicas sem dependências externas.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.

Os teste de integração e E2E compartilham o mesmo banco ou cada um tem o seu próprio banco?

Oi, Luidi! Como vai?

O ideal é não compartilhar o mesmo banco entre testes de integração e E2E. Mantenha um banco por “tipo de suíte” (ou, no mínimo, um por ambiente) para evitar interferência de dados e deixar os testes mais confiáveis.

Como fazer do jeito certo (prático):

  1. Integração

    • Use um banco exclusivo de integração (ex.: app_test_integration).
    • Antes de cada teste (ou suite), limpe o banco (truncate/delete) e semeie somente os dados necessários.
    • Rode em pipeline e local apontando para a mesma “config de integração”, mas em instâncias separadas quando possível.
  2. E2E

    • Use um banco exclusivo de E2E (ex.: app_test_e2e).
    • O E2E costuma criar fluxos completos (login, cadastro, pedidos etc.), então ele precisa de dados previsíveis e isolamento total.
  3. Unitários

    • Não usam banco real: use mocks (ex.: repository mockado, jest.fn(), spyOn) para isolar a regra de negócio.

Exemplo direto com variáveis de ambiente (Node.js):

  • Separe as strings de conexão por ambiente/suíte e rode com NODE_ENV diferente.

# .env.test.integration
DATABASE_URL=postgres://user:pass@localhost:5432/app_test_integration

# .env.test.e2e
DATABASE_URL=postgres://user:pass@localhost:5432/app_test_e2e

// exemplo: carregando env por suíte (pseudo)
// npm run test:integration -> NODE_ENV=test:integration
// npm run test:e2e        -> NODE_ENV=test:e2e

const envFileBySuite = {
  "test:integration": ".env.test.integration",
  "test:e2e": ".env.test.e2e",
};

require("dotenv").config({ path: envFileBySuite[process.env.NODE_ENV] });

Fico à disposição!