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.

Onde cada runner mora agorabash
# 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 --runInBand

Os runners num relance, Angular 22

FerramentaO que testaStatus no Angular 22
VitestLógica de unidade e de componente (Node + jsdom)Padrão e estável no CLI
KarmaRunner de unidade legado (browser real)Deprecado, ainda suportado em suítes existentes
JestRunner de unidadeSem builder no CLI; comunidade via jest-preset-angular / Nx
Web Test RunnerRunner experimental do CLI (o plano de 2023)Descartado; fora da história da v22
Cypress / PlaywrightComponente 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ê parteNo Angular 22O que eu faria
Projeto novo no CLIVitest é o padrãoAceitar. Não tem decisão a tomar aqui.
Suíte Karma/Jasmine em produçãoKarma está deprecado, mas ainda suportadoMigrar em fatias, não numa branch só. Manter o Karma rodando até o time confiar no sinal novo.
jest-preset-angular ou Nx Jest funcionandoNão é mais um builder nativo do CLIFicar. Você não perdeu nada funcional. Mudar só quando quiser o alinhamento com o Vite, não por medo.
Escolhendo runner fora do CLIVitest compartilha o build graph do AngularVitest, a menos que uma dependência forte prenda você no Jest.
Você precisa de browser real ou ponta a pontaVitest roda em Node com jsdom, não num browser realCypress 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

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.

Abrir playbook →

Leia também

Guia · 6 min

Quando migrar uma suíte Angular para Vitest

Vitest virou o test runner padrão do Angular CLI, mas migrar uma suíte existente ainda é experimental: quais specs migrar primeiro, o que o fakeAsync quebra, e como manter o CI confiável.

Ler artigo →

Guia · 7 min

De Karma para Vitest no Angular: a config que realmente roda

O que o test target de Vitest do Angular v21 realmente é (uma linha), de onde vêm polyfills e styles, o install que tira o Karma, e as poucas opções que valem adicionar.

Ler artigo →

Guia · 8 min

Testando componentes no Angular com Vitest: TestBed, jsdom e browser mode

Como os testes de componente do Angular se comportam de verdade no Vitest: o TestBed não muda, o DOM é jsdom (sem layout, sem CSS de verdade), e os specs que precisam de um browser real são os que valem mover pro browser mode do Vitest.

Ler artigo →