Modern Angular
Escolhendo o test runner do Angular em 2026: Vitest, Jest ou Karma
No Angular 22 (junho/2026), o Vitest é o test runner padrão e estável do CLI. O Karma continua funcionando em suítes existentes, mas está deprecado. Os builders experimentais de Jest e Web Test Runner foram descartados quando o Vitest estabilizou; o Jest agora vive em ferramentas da comunidade, como o jest-preset-angular. Cypress e Playwright cobrem outra camada e não substituem o Vitest.
Em projeto novo, a decisão já está tomada
Rode ng new no Angular 22 e o comando de teste já vem ligado no Vitest. Não tem pergunta sobre runner, não tem escolha pra agonizar. O CLI decidiu, e o guia oficial de testes documenta o Vitest como o padrão pra projetos novos. Pra um app começando do zero, essa é a decisão inteira: aceite o padrão e siga em frente.
As perguntas interessantes começam no momento em que você já tem uma suíte, ou lê uma thread de 'Cypress vs Vitest' e fica na dúvida se escolheu errado. A maioria dessas comparações pergunta a coisa errada. O runner deixou de ser uma disputa única e aberta; virou um conjunto pequeno de decisões que dependem de onde você está começando.
O que mudou: Jest e Web Test Runner saíram do CLI
Lá em 2023, o Doug Parker anunciou o plano de tirar o Angular CLI do Karma e levar pro Jest mais o Web Test Runner, e por um tempo o CLI entregou os dois como builders experimentais. Aí o Vitest chegou, estabilizou na v21, e esse plano anterior foi abandonado: os builders experimentais de Jest e Web Test Runner foram deprecados e não fazem mais parte da história de testes na v22.
O Jest não morreu. Ele saiu do CLI e voltou pras ferramentas da comunidade, onde o jest-preset-angular e o plugin de Jest do Nx continuam funcionando e mantidos. Então 'o Angular removeu o Jest' é meia verdade: o CLI removeu o builder experimental de Jest dele, não o seu setup com jest-preset-angular. Se esse setup está verde e rápido, a v22 não te obriga a nada.
# Angular 22 CLI: ng test roda no Vitest por padrão
ng test --no-watch
# Projetos com jest-preset-angular seguem rodando Jest direto,
# fora do test builder do CLI
npx jest --runInBandOs runners num relance, Angular 22
| Ferramenta | O que testa | Status no Angular 22 |
|---|---|---|
| Vitest | Lógica de unidade e de componente (Node + jsdom) | Padrão e estável no CLI |
| Karma | Runner de unidade legado (browser real) | Deprecado, ainda suportado em suítes existentes |
| Jest | Runner de unidade | Sem builder no CLI; comunidade via jest-preset-angular / Nx |
| Web Test Runner | Runner experimental do CLI (o plano de 2023) | Descartado; fora da história da v22 |
| Cypress / Playwright | Componente no browser e e2e (browser real) | Complementar ao Vitest, outra camada |
A decisão, por onde você começa
Não existe um melhor runner único. Existe o runner que encaixa no seu ponto de partida. Esse é o mapa que eu entregaria pra um tech lead perguntando pra que lado ir.
| De onde você parte | No Angular 22 | O que eu faria |
|---|---|---|
| Projeto novo no CLI | Vitest é o padrão | Aceitar. Não tem decisão a tomar aqui. |
| Suíte Karma/Jasmine em produção | Karma está deprecado, mas ainda suportado | Migrar em fatias, não numa branch só. Manter o Karma rodando até o time confiar no sinal novo. |
| jest-preset-angular ou Nx Jest funcionando | Não é mais um builder nativo do CLI | Ficar. Você não perdeu nada funcional. Mudar só quando quiser o alinhamento com o Vite, não por medo. |
| Escolhendo runner fora do CLI | Vitest compartilha o build graph do Angular | Vitest, a menos que uma dependência forte prenda você no Jest. |
| Você precisa de browser real ou ponta a ponta | Vitest roda em Node com jsdom, não num browser real | Cypress ou Playwright, ao lado do Vitest, nunca no lugar dele. |
Por que 'Cypress vs Vitest' é a pergunta errada
Cypress e Playwright vivem aparecendo nas buscas de 'versus Vitest', e esse enquadramento confunde. O Vitest roda seus testes em Node com uma emulação de DOM via jsdom ou happy-dom: rápido, sem subir browser, ideal pra lógica de componente, services, pipes e estado guiado por signals. Cypress e Playwright dirigem um browser de verdade: mais lentos, mas pegam o que uma emulação em Node não alcança, como layout real, eventos nativos, cookies, foco e falha de rede.
A própria documentação do Vitest recomenda usar os dois juntos: o Vitest pra lógica headless, um runner de browser pro que só o browser consegue verificar. Então a pergunta honesta deixa de ser 'qual ganha' e vira 'em qual camada está esse bug?'. Se o bug é de lógica, fica com o Vitest. Se ele só reproduz num browser real, o terreno é do Cypress ou do Playwright, e o Vitest nunca ia cobrir isso mesmo.
Artefato para reaproveitar
Regra de decisão pro test runner do Angular
- Projeto novo: aceite o Vitest. O CLI já decidiu; não reabra a discussão.
- Suíte Karma existente: migre em fatias e mantenha o Karma até o time confiar nas falhas e nos passes novos.
- jest-preset-angular ou Nx Jest funcionando: fique. A v22 removeu o builder de Jest do CLI, não o seu setup.
- Precisa de browser real ou ponta a ponta: coloque Cypress ou Playwright ao lado do Vitest, nunca no lugar dele.
- Travado na escolha: pergunte em qual camada o bug vive antes de nomear uma ferramenta.
Perguntas frequentes
Qual é o test runner padrão no Angular 22?
O Vitest. Projetos novos do Angular CLI já nascem com Vitest, e o guia oficial de testes documenta ele como o padrão. O Karma continua suportado em projetos existentes, mas está deprecado, e os antigos builders experimentais de Jest e Web Test Runner saíram da história.
O Karma morreu no Angular?
Não morreu, mas está deprecado. O Karma parou de receber novidades depois da depreciação em 2023, e o Vitest virou o padrão. O guia oficial ainda lista o Karma como suportado, então uma suíte Karma existente continua rodando e você não é obrigado a migrar num release só. Trate a depreciação como direção, não como prazo.
Ainda dá pra usar Jest com Angular?
Dá, via ferramentas da comunidade. O Angular CLI removeu o builder experimental de Jest dele, mas o jest-preset-angular e o plugin de Jest do Nx continuam funcionando e mantidos. Se o seu setup de Jest está rápido e verde, o Angular 22 não te tira dele; você só deixa de estar num caminho nativo do CLI.
Cypress vs Vitest, qual escolher?
Nenhum substitui o outro. O Vitest roda lógica de unidade e de componente em Node com emulação via jsdom; o Cypress e o Playwright dirigem um browser real pro que só o browser verifica, como layout, eventos nativos e fluxos de ponta a ponta. A doc do Vitest recomenda usar os dois juntos. Escolha pela camada: lógica vai pro Vitest, comportamento de browser real vai pro Cypress ou Playwright.
Devo migrar minha suíte Karma pro Vitest agora?
Só de propósito. Migrar um projeto existente é marcado como experimental na doc oficial, e migração de runner só compensa se o time continua confiando no resultado depois. Migre uma fatia pequena primeiro, compare tempo de CI e qualidade das falhas, documente o que quebra (helpers de Zone.js como fakeAsync não são suportados), e então decida a próxima fatia.
Fontes consultadas
- https://angular.dev/guide/testing
- https://angular.dev/guide/testing/migrating-to-vitest
- https://blog.angular.dev/announcing-angular-v21-57946c34f14b
- https://blog.angular.dev/moving-angular-cli-to-jest-and-web-test-runner-ef85ef69ceca
- https://vitest.dev/guide/comparisons
- https://www.npmjs.com/package/jest-preset-angular
- 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.