Cobertura Vitest vs Jest: qual reporta mais rápido no CI?
Ambos produzem cobertura, mas o provider importa: a cobertura v8 é rápida, a istanbul é mais precisa - e o Vitest e o Jest as expõem de forma diferente.
O Vitest coleta cobertura via um provider configurável (v8 por padrão, ou istanbul). O Jest usa cobertura baseada em istanbul por padrão. A diferença de velocidade e precisão geralmente se resume a v8 (rápido, nativo) vs istanbul (instrumentado, preciso) mais do que ao runner em si.
| Cobertura Vitest | Cobertura Jest | |
|---|---|---|
| Provider padrão | v8 (rápido) | istanbul (instrumentado por babel) |
| Provider alternativo | istanbul disponível | v8 via config/tooling |
| Velocidade | Rápida (v8) / mais lenta (istanbul) | Mais lenta (instrumentação) |
| Precisão | Boa (v8), alta (istanbul) | Alta (istanbul) |
| Tratamento de ESM/TS | Nativo | Precisa de config |
No CI
O Vitest com o provider v8 geralmente gera cobertura mais rápido porque usa contagens nativas do V8 em vez de instrumentar o código, o que encurta a execução de cobertura. O istanbul (padrão do Jest, e uma opção no Vitest) instrumenta o source para dados de linha/branch muito precisos a um custo maior. Se o tempo de cobertura é um gargalo, o v8 é a alavanca; se você precisa da cobertura de branches mais precisa, o istanbul vale o tempo.
Cobertura no CI
Imponha um threshold de cobertura para falhar o build em regressões, e faça upload dos relatórios para seu serviço de cobertura. Execuções de cobertura adicionam trabalho de CPU sobre os testes; runners gerenciados mais rápidos encurtam suítes pesadas de cobertura de qualquer forma.
The switching cost is mostly in the parts nobody lists
- Assertions and mocks usually port mechanically when the target implements a compatible API; custom transformers and framework plugins do not.
- Snapshot formats differ between runners, so plan to regenerate and review rather than port.
- Run both suites in parallel in CI for a period and diff the results. A migration that changes which tests fail is not a migration, it is a regression you have not found yet.
- Coverage numbers move on a runner change even when the tests do not, because instrumentation differs. Re-baseline any coverage gate deliberately.
O veredito
Quer a cobertura mais rápida e você está no Vitest: use o provider v8. Precisa da cobertura de branches mais precisa: istanbul (padrão do Jest, também disponível no Vitest). O provider, mais do que o runner, define velocidade vs precisão.