Jest 20: 💖 Testes Encantadores & 🏃🏽 Executor Multi-Projeto
Esta página foi traduzida por PageTurner AI (beta). Não é oficialmente endossada pelo projeto. Encontrou um erro? Reportar problema →
Há alguns meses, anunciamos o Jest 19 com grandes novidades, sendo o maior lançamento até então. O Jest 20 traz o dobro de mudanças em relação à versão anterior, apresenta uma reescrita completa do executor de testes e adiciona novas APIs de teste. Esta versão oferece um novo nível de personalização e configuração para projetos, facilitando a atualização. Além dos Testes JavaScript Sem Dores, acreditamos que o Jest agora proporciona uma experiência encantadora de testes em JavaScript. Vamos explorar as melhores novidades em detalhes:
Executor Multi-Projeto e Reformulação da Configuração
Até agora, o Jest só operava em um projeto por vez. Isso é incômodo ao trabalhar com vários projetos menores, cada um com sua própria configuração. Com o Jest 20, reescrevemos completamente o executor de testes para rodar múltiplos projetos simultaneamente em uma única instância do Jest — ideal para quem trabalha com frontend React e backend Node.js. Veja um vídeo do Jest executando testes para React, Relay, Yarn e Jest ao mesmo tempo:

O Jest agora recolhe o guia de uso após a primeira execução para economizar espaço vertical no terminal.
Além disso, reformulamos completamente o sistema de configuração. Agora você pode passar qualquer opção de configuração via CLI para substituir as definidas no arquivo de configuração. Também ajustamos o Jest para buscar por padrão um arquivo jest.config.js, permitindo definir configurações em JavaScript além do tradicional package.json. Com esses recursos, você pode combinar o Jest de formas mais poderosas. Por exemplo, para identificar quais testes seriam executados com base em arquivos alterados de um commit em múltiplos projetos de um monorepo, combine argumentos da CLI assim:
$ jest --projects projectA projectB --listTests --findRelatedTests projectA/banana.js projectB/kiwi.js
[
"projectA/banana.test.js",
"projectB/kiwi.test.js",
"projectB/pineapple.test.js",
]
Isso é especialmente útil em sistemas de integração contínua (CI), onde convém executar apenas um subconjunto de testes em Pull Requests, evitando que o Jest rode milhares de arquivos a cada pequena alteração.
Finalmente, agora mapeamos corretamente a cobertura de código com TypeScript e executamos cobertura para arquivos não testados em processos worker, trazendo ganhos significativos de velocidade.
Novas e Aprimoradas APIs de Teste
Fizemos várias adições e melhorias nas APIs de teste que ajudarão a escrever testes mais eficazes. Todos esses aprimoramentos foram feitos inteiramente por membros da comunidade!
-
Melhor teste assíncrono: Novo suporte a async/Promise através dos modificadores resolves/rejects no expect:
expect(Promise(…)).resolves.toEqual(…). Veja a documentação. -
Esperar
nasserções: Além doexpect.assertions(n), o novoexpect.hasAssertions()garante que um teste tenha pelo menos uma asserção. -
Plugin de lint: Adicionamos a regra
valid-expectaoeslint-plugin-jestpara garantir que uma asserção seja chamada após oexpect. Isso evita erros como umexpect(banana);solto sem chamada de asserção. -
Plugins Pretty-Format: Adicionamos novos plugins ao pretty-format do Jest. Agora formatamos estruturas de dados do Immutable.js e HtmlElements em falhas de asserção e snapshots.
-
Ambiente personalizado: Agora é possível adicionar a anotação
@jest-environment node|jsdomno comentário doc-block de um arquivo de teste para usar um ambiente diferente do padrão em testes individuais.
Aqui está um exemplo de como todas as novas APIs juntas tornarão os testes mais prazerosos:
/**
* @jest-environment node
*/
test('compares apples and bananas', async () => {
expect.hasAssertions(); // Ensure this test has at least one assertion.
await expect(
Promise.resolve(Immutable.Map({apples: 1, bananas: 2})),
).resolves.toEqual(Immutable.Map({apples: 1, bananas: 3}));
expect('banana'); // valid-expect in eslint-plugin-jest will show an error.
});
Este exemplo exibirá uma falha de teste semelhante a esta:

