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):
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.
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.
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!