Jest 16.0: CLI Turboalimentada e Atualização da Comunidade
Esta página foi traduzida por PageTurner AI (beta). Não é oficialmente endossada pelo projeto. Encontrou um erro? Reportar problema →
Faz um mês desde o último lançamento importante e implementamos melhorias significativas no Jest desde então. Nesta versão principal, estamos atualizando o formato de snapshot que usamos, o que provavelmente exigirá que os snapshots sejam atualizados ao fazer upgrade do Jest. Não tomamos essas decisões levianamente e não esperamos que isso aconteça com frequência, mas acreditamos ser necessário aprimorar o formato periodicamente.
CLI Aprimorada

O Jest 16 apresenta uma nova interface de relatório que mostra testes em execução junto com um resumo dinâmico e uma barra de progresso baseada no tempo estimado de execução de testes anteriores. Também melhoramos a saída da CLI para funcionar melhor com diferentes esquemas de cores. Se houveram falhas de teste na execução anterior, o Jest agora sempre executará esses testes primeiro para fornecer feedback útil aos usuários o mais rápido possível.
Também adicionamos diversos novos recursos que podem ser úteis:
-
Novas flags de CLI: A opção
--testNamePattern=patternou-t <pattern>foi adicionada para filtrar testes pela linha de comando, similar ao queit.onlyoufitfazem nos testes. -
Testes que falharam anteriormente agora são sempre executados primeiro.
-
jest <pattern>agora é insensível a maiúsculas/minúsculas para facilitar a filtragem de arquivos de teste. -
Execuções de teste no modo watch agora podem ser interrompidas. Durante uma execução, basta pressionar qualquer tecla de entrada do modo watch (
a,o,p,qouenter) para abortar a execução atual e iniciar uma nova. -
A flag
--bailagora também funciona no modo watch. Combinado com a execução prioritária de testes falhos, o modo watch do Jest agora parece turboalimentado! -
O Jest agora considera automaticamente arquivos e testes com extensão
jsx. -
O Jest alerta sobre arquivos de mock manuais duplicados e melhoramos os mocks criados automaticamente para módulos ES compilados com babel.
-
A função
jest.clearAllMocksfoi adicionada para limpar todos os mocks entre testes. -
Aprimoramos a resolução de módulos quando
moduleNameMapperé utilizado. -
Por fim, a opção CLI
--findRelatedTests <fileA> <fileB>foi adicionada para executar testes relacionados aos arquivos especificados. Isso é especialmente útil como hook de pre-commit para executar testes apenas em arquivos específicos que possuem testes associados.
Veja como o Jest se comporta quando uma execução é interrompida no modo watch: 
Atualizações de Snapshots
A implementação de snapshots do Jest foi completamente reescrita. A nova versão do pacote jest-snapshot está estruturada para facilitar a integração com outros test runners e permitir integrações interessantes como com o React Storybook. O Jest não marca snapshots como obsoletos em arquivos com testes ignorados ou falhos. Também fizemos várias alterações no formato:
-
Objetos e arrays agora são impressos com vírgula final para minimizar alterações futuras em snapshots.
-
Removemos nomes de funções dos snapshots. Eles causavam problemas com diferentes versões do Node, com instrumentação de cobertura de código, e geralmente consideramos que mostrar mudanças de nomes de funções não é um sinal útil para os usuários.
-
Snapshots agora são ordenados usando ordem de classificação natural dentro de cada arquivo.
Ao atualizar para o Jest 16, a diferença (diff) pode se parecer com esta: 
Atualizações da Biblioteca de Testes
Concluímos a migração das asserções do Jasmine para os novos matchers do Jest. Adicionamos três novos matchers: toBeInstanceOf, toContainEqual e toThrowErrorMatchingSnapshot. Melhoramos as mensagens de falha para os matchers de spies/mocks toHaveBeenLastCalledWith, toHaveBeenCalledWith, lastCalledWith e toBeCalledWith, tornando-as mais legíveis. Agora que reescrevemos todas as asserções e as separamos em seu próprio pacote, trabalharemos para torná-las independentes, permitindo sua integração em qualquer framework de testes.
Também adicionamos vários apelidos solicitados pela comunidade. Para focar em um único teste, agora você pode usar it.only ou test.only, além do já existente fit; para pular um teste, it.skip ou test.skip estão disponíveis junto com xit; e para definir um teste como concorrente, use test.concurrent, útil quando seu teste acessa recursos de rede ou bancos de dados.
Por fim, se você deseja substituir o global expect por outra biblioteca de asserções como chai, agora isso pode ser feito usando a opção de configuração setupTestFrameworkScriptFile.
Atualização da Comunidade
No último mês, muitos artigos foram escritos sobre o recurso de snapshot testing do Jest, como migrar para o Jest e como começar a escrever testes. Também fiz alguns vídeos ao vivo explicando o funcionamento do Jest e do snapshot testing:
Várias pessoas escreveram artigos sobre snapshot testing. O artigo mais opinativo que ressoou com a equipe do Jest foi "Testing with Jest Snapshots: First Impressions". Ben faz três ótimos pontos em seu post:
-
Testes de snapshot complementam testes convencionais, não os substituem
-
Testes de snapshot são mais úteis com um processo saudável de code review
-
Testes de snapshot funcionam bem com auto-mocking
Recomendamos fortemente a leitura completa do artigo. Ben fez um trabalho fantástico explicando as razões por trás do snapshot testing. É importante destacar que n ão introduzimos essa técnica para substituir outras formas de teste, mas sim para permitir que engenheiros testem códigos que normalmente não seriam testados. Funciona bem para componentes React, saídas de CLI, mensagens de erro e outros casos, mas não resolve todos os problemas. O objetivo do Jest é oferecer múltiplas formas de escrever testes eficazes sem sacrificar desempenho ou a manutenibilidade do projeto.
Outros destaques sobre snapshot testing:
-
Série sobre testes no React Native: Parte 1: Jest – Snapshot entre em cena e Parte 2: Jest – Snapshots do Redux para Actions e Reducers
-
Se você usa a popular biblioteca de testes enzyme, agora existe o projeto enzyme-to-json que permite usar o recurso de snapshot testing do Jest junto com o enzyme.
O próprio Redux agora usa Jest e Max Stoiber escreveu um tutorial sobre como testar código escrito com redux. Também há um ótimo guia sobre como escrever testes para MobX. Se você usa create-react-app, o Jest agora vem incluído por padrão. Kent C. Dodds criou uma série de vídeos no egghead.io que ajudarão você a começar com o Jest.
Se você usa outros test runners, Kenneth Skovhus construiu uma incrível biblioteca jest-codemods que automatiza a conversão para você. Codemods são fantásticos: eles permitem que você avalie rapidamente se o Jest atenderá suas necessidades. Experimente!
O changelog completo está disponível no GitHub. O Jest 16 foi um verdadeiro esforço comunitário de JavaScript e o projeto agora tem mais de 220 colaboradores. Agradecemos a cada um de vocês por ajudarem a tornar este projeto excelente.
