Ir para o conteúdo principal

Jest 16.0: CLI Turboalimentada e Atualização da Comunidade

· 7 min de leitura"
Tradução Beta Não Oficial

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

reporter

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=pattern ou -t <pattern> foi adicionada para filtrar testes pela linha de comando, similar ao que it.only ou fit fazem 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, q ou enter) para abortar a execução atual e iniciar uma nova.

  • A flag --bail agora 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.clearAllMocks foi 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: 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: snapshots

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:

  1. Testes de snapshot complementam testes convencionais, não os substituem

  2. Testes de snapshot são mais úteis com um processo saudável de code review

  3. 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:

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.