Vitest vs uvu: Testes JS Completos vs Minimalistas
O Vitest é um test runner completo e nativo do Vite; o uvu é um runner minúsculo e ultrarrápido, com quase nenhum overhead para projetos pequenos.
O Vitest oferece um conjunto rico de funcionalidades (mocking, cobertura, watch UI, ESM/TS prontos para uso) e compartilha a config com o Vite. O uvu é deliberadamente minimalista: alguns kilobytes, inicialização muito rápida e apenas a API necessária para escrever testes.
| Vitest | uvu | |
|---|---|---|
| Escopo | Completo (mocks, cobertura, UI) | Núcleo mínimo |
| Overhead de inicialização | Maior (mais maquinário) | Muito baixo |
| Integração com o Vite | Nativa, compartilha a config | Nenhuma |
| TS/ESM | Embutido | Traga seu próprio loader |
| Melhor encaixe | Apps, suítes grandes | Libs minúsculas, microbenchmarks |
Onde o Vitest vence
Para aplicações e suítes maiores, o Vitest fornece mocking, snapshots, cobertura e uma watch UI sem juntar ferramentas na força, e reutiliza sua config e transformações do Vite (TS, JSX, aliases). Ele é o padrão prático para a maioria dos projetos modernos de front-end e Node.
Onde o uvu vence
Para uma biblioteca pequena em que você quer a inicialização mais rápida possível e o menor peso de dependências, o uvu é excelente: instalação mínima, execuções quase instantâneas e uma API pequena. Ele brilha em pacotes minúsculos e verificações rápidas onde as funcionalidades do Vitest são desnecessárias.
Em CI
O uvu pode fazer a execução de testes de um pacote pequeno parecer instantânea; o Vitest escala para suítes grandes com paralelismo e cobertura. Adeque o runner ao tamanho do projeto: minimalista para libs minúsculas, completo assim que você precisar de mocks e cobertura.
O veredito
Use o Vitest para apps e qualquer suíte que precise de mocking, cobertura ou integração com o Vite; use o uvu para bibliotecas minúsculas em que a velocidade de inicialização e um footprint mínimo importam mais.