Modern Angular
Quando migrar uma suíte Angular para Vitest
Vitest é o default test runner desde o Angular v21 (novembro/2025), mas suítes Karma/Jasmine existentes pedem filtro de migração. A documentação oficial de migração é explícita: 'Migrating an existing project to Vitest is considered experimental.' Doug Parker já anunciava a depreciação do Karma em abril/2023; o caminho foi longo.
Default não é obrigação
Para projetos novos do Angular CLI, Vitest é o default atual. Isso é um sinal forte sobre a direção dos testes no Angular. Não é a mesma coisa que dizer que toda suíte Karma/Jasmine existente deve migrar em uma branch.
Uma migração de test runner só é bem-sucedida se o time confia no resultado depois. Se a migração deixa o CI mais rápido, mas ninguém acredita nas falhas ou nos passes, o projeto perdeu sinal.
A primeira fatia importa
| Candidato | Boa primeira fatia? | Por quê |
|---|---|---|
| Pipes puros | Sim | Pouca dependência de DOM e paridade fácil de assertions. |
| Services sem globais de browser | Sim | Feedback rápido com setup simples. |
| Helpers de validação | Sim | Útil para forms sem complexidade de UI. |
| Componentes pequenos | Talvez | Bom se evitam overlays, animações e timers complexos. |
| Specs de overlay, canvas, drag/drop ou browser pesado | Depois | Começam pelo caminho mais difícil da migração. |
O que rodar primeiro
A primeira branch de migração deve provar configuração, comportamento no CI e um conjunto pequeno de padrões de teste. Não comece apagando Karma de uma aplicação grande.
O caminho oficial de migração inclui configuração manual, browser mode opcional e um schematic experimental para refatorar Jasmine para Vitest. Isso significa que todo diff gerado ainda precisa de review.
npm install --save-dev vitest jsdom
ng test --no-watch
ng g @schematics/angular:refactor-jasmine-vitest --include=src/app/ordersO que me faria esperar
Espere se a suíte depende muito de fakeAsync, flush, APIs apenas de browser, launchers customizados de Karma ou setup global de teste que ninguém entende hoje. Isso não bloqueia para sempre, mas é um péssimo começo.
O guia oficial de migração para Vitest é explícito: helpers baseados em Zone.js, como fakeAsync, flush e waitForAsync, não são suportados. Exemplos novos nesta série devem preferir async nativo, assertions em Observables ou timers do Vitest, a menos que estejam claramente marcados como código Karma/Jasmine.
A proposta correta não é 'migrar todos os testes para Vitest'. É 'migrar esta fatia, comparar tempo e qualidade do CI, documentar padrões sem suporte e decidir a próxima fatia'.
Artefato para reaproveitar
Critérios de aceite para piloto Vitest
- Uma fatia pequena migrada e revisada.
- Tempo de CI comparado antes e depois.
- Padrões sem suporte documentados, especialmente helpers de teste baseados em Zone.js.
- Necessidade de browser mode decidida explicitamente.
- Karma mantido até o time confiar no caminho novo.
Fontes consultadas
- https://angular.dev/guide/testing
- https://angular.dev/guide/testing/migrating-to-vitest
- https://angular.dev/api/schematics/refactor-jasmine-vitest
- https://vitest.dev/guide
- https://blog.angular.dev/moving-angular-cli-to-jest-and-web-test-runner-ef85ef69ceca
- https://blog.angular.dev/announcing-angular-v20-b5c9c06cf301
- https://blog.angular.dev/announcing-angular-v21-57946c34f14b
- https://angular.dev/roadmap
Modern Angular Playbook
Este artigo é um play.
O Playbook do Angular Moderno reúne o diagnóstico, a matriz de adoção, onze jogadas e o plano de 30 dias. Grátis, em inglês e português.
Você recebe os dois PDFs por email, pela lista do Dojo IA.
André Ramosdisponível para vagas remotas, UTC−3Entre em contato →