Home > Blog > Desenvolvimento Web
Desenvolvimento Web
JavaScript
Programação

Coverage de testes no Node.js: meça com critério

Atualizado em: 12 de outubro de 2026

Terminal Linux usado em desenvolvimento e administração de aplicações Node.js

Coverage de Testes no Node.js mede quais linhas, funções e caminhos do código foram executados durante a suíte. A cobertura ajuda a localizar áreas sem testes, mas não comprova que o comportamento foi validado corretamente.

Uma suíte pode alcançar 100% executando linhas sem verificar resultados importantes. Por isso, cobertura deve ser combinada com assertions, cenários negativos, testes de integração e análise de risco.

Neste guia, você aprenderá métricas, relatórios, limites, exclusões, CI e boas práticas com o test runner nativo.

Executando cobertura

node --test --experimental-test-coverage

O runtime executa os testes e apresenta métricas dos arquivos carregados.

Métricas principais

  • linhas: linhas executadas;
  • funções: funções chamadas;
  • branches: caminhos de condições exercitados;
  • statements: instruções executadas.

Branch coverage costuma revelar falhas que line coverage não mostra.

Exemplo de condição

export function calcularFrete(total, vip) {
  if (vip) return 0;
  if (total >= 200) return 0;
  return 20;
}

Um único teste pode executar várias linhas, mas você precisa cobrir cliente VIP, compra acima do limite e compra comum.

Cobertura não é qualidade

Este teste executa a função, mas não valida nada:

test('executa cálculo', () => {
  calcularFrete(100, false);
});

Prefira assertions claras:

assert.equal(calcularFrete(100, false), 20);

Metas por risco

Não use um número único como objetivo absoluto. Autenticação, cobrança e autorização exigem cenários mais rigorosos que arquivos de configuração trivial.

Threshold no CI

O pipeline pode falhar quando a cobertura cai abaixo de um limite definido pela equipe. O limite deve impedir regressão sem incentivar testes artificiais.

Cobertura incremental

Em sistemas legados, aumente gradualmente. Exigir 100% imediatamente leva a exclusões indiscriminadas ou testes frágeis.

Arquivos gerados

Código compilado, migrações geradas e bundles podem distorcer relatórios. Exclua apenas arquivos que realmente não devem ser testados e documente a razão.

Testes de erro

Caminhos de erro costumam ficar sem cobertura:

  • timeout;
  • resposta inválida;
  • recurso inexistente;
  • permissão negada;
  • rollback;
  • cancelamento.

Cobertura de integrações

Testes unitários cobrem lógica, mas não provam queries, serialização ou configuração. Use testes de integração para essas fronteiras.

Relatórios no CI

Armazene relatório como artefato e apresente resumo no pull request. Não publique caminhos internos ou código sensível em serviços externos sem autorização.

Source maps

Projetos TypeScript ou transpilados precisam de source maps corretos para associar cobertura ao código-fonte. Veja Source Maps no Node.js.

Testes concorrentes

Concorrência pode alterar quais módulos são carregados e dificultar diagnóstico. Mantenha os testes determinísticos e compare resultados em ambiente limpo.

Mutação

Mutation testing altera o código propositalmente para verificar se testes detectam a mudança. Ele oferece sinal complementar mais forte que porcentagem pura, embora seja mais caro.

Arquivos sem testes

Garanta que o relatório inclua arquivos relevantes mesmo quando nenhum teste os importa. Caso contrário, módulos esquecidos podem nem aparecer.

Revisão de pull request

Analise novas linhas sem cobertura, mas também observe se os testes exercitam requisitos. Um diff pequeno pode alterar um caminho crítico sem reduzir muito a porcentagem total.

Integração com node:test

Consulte Node Test Runner no Node.js para hooks, subtests, timeouts e execução no CI.

Erros comuns

  • buscar 100% sem avaliar risco;
  • executar sem assertions;
  • excluir arquivos difíceis;
  • ignorar branches;
  • medir apenas testes unitários;
  • não incluir arquivos não importados;
  • comparar relatórios gerados em ambientes diferentes;
  • deixar meta cair silenciosamente.

Checklist

  • linhas e branches analisadas;
  • assertions relevantes;
  • caminhos negativos;
  • threshold documentado;
  • relatório no CI;
  • source maps corretos;
  • arquivos críticos incluídos;
  • integração e contratos complementares.

Conclusão

Coverage de Testes no Node.js é um instrumento de diagnóstico, não um certificado de qualidade. Ela mostra onde a suíte passou, mas não se os requisitos foram verificados.

Use cobertura para impedir regressões e orientar revisão. Combine a métrica com testes de comportamento, integração e análise de riscos para obter confiança real.

Consulte a documentação oficial de cobertura do test runner e a referência do node:test.

10 melhores cursos de programação em 2026

Descubra os melhores cursos de programação. Aprenda a escolher o curso ideal para iniciar ou avançar na carreira de desenvolvedor

POSTS RELACIONADOS

Ver todos

Seta para a direita