Jest 23: 🔥 Testes Rápidos e Deliciosos
Esta página foi traduzida por PageTurner AI (beta). Não é oficialmente endossada pelo projeto. Encontrou um erro? Reportar problema →
Hoje estamos animados em anunciar o Jest 23, nosso maior lançamento até agora! Junto com mais de 100 colaboradores, entregamos uma tonelada de recursos e correções de bugs. Obrigado a todos na comunidade por ajudar a tornar os Testes JavaScript Deliciosos.
Também damos as boas-vindas ao Babel e ao webpack na comunidade Jest! Após migrar do Mocha para o Jest 23 Beta, o webpack reduziu o tempo total de testes em 6x - de mais de 13 minutos para 2 minutos e 20 segundos. #blazingmeansgood
Aqui estão alguns destaques e mudanças que quebram compatibilidade no Jest 23.
Para a lista completa, consulte o changelog.
Modo Interativo de Snapshots
Adicionamos uma nova opção padrão no menu de watch chamada Modo Interativo de Snapshots. Esse modo permite percorrer cada snapshot com falha em cada suite com problemas, revisar os snapshots falhos e escolher atualizar ou pular cada um individualmente.

Veja a documentação do Modo Interativo de Snapshots aqui.
Snapshot Property Matchers
Frequentemente, objetos capturados em snapshots contêm valores gerados como Datas e IDs. Agora o Jest permite passar propriedades para o matcher de snapshot que especificam a estrutura dos dados em vez dos valores específicos. Esses property matchers são verificados antes de serializar o tipo do matcher (em vez do valor), garantindo resultados consistentes de snapshots entre execuções de teste.

Consulte a documentação atualizada do toMatchSnapshot ou o guia sobre Property Matchers para mais informações.
Matchers Assíncronos Personalizados
Agora suportamos matchers assíncronos com expect.extends! Matchers assíncronos retornam uma Promise para que você possa usar await até sua resolução. Exemplo:

Documentação disponível aqui.
Matchers Assimétricos Personalizados
Matchers assimétricos são excelentes quando você só precisa de igualdade assimétrica. Por exemplo, quando o lado esquerdo deve ser um objeto com um subconjunto das propriedades do direito, em vez de uma correspondência exata. O Jest fornece vários matchers assimétricos prontos, e nesta versão introduzimos Matchers Assimétricos Personalizados.

Jest Each
@mattphillipsio doou o pacote jest-each ao Jest Core (obrigado, Matt!). O jest-each é uma biblioteca inspirada em mocha-each e Spock Data Tables que permite definir tabelas de casos de teste e executar um teste para cada linha com os valores das colunas especificados. Suportamos arrays e template literais para todas variantes de describe e test. A documentação está disponível aqui, e para quem ainda não migrou para o Jest 23, continuamos publicando o jest-each separadamente!

Um enorme agradecimento ao Prettier por corrigir a formatação de tabelas tão rapidamente (veja o Prettier 1.13)!
Novos Matchers
Só adicionamos matchers ao core quando acreditamos que serão úteis para grande parte da comunidade Jest, deixando a maioria dos matchers para a comunidade (veja jest-extended). Alguns matchers foram selecionados para o core, e o Jest 23 adiciona:
-
nthCalledWith
-
toReturn
-
toReturnTimes
-
toReturnWith
-
lastReturnedWith
-
nthReturnedWith
-
toStrictEqual

Veja a documentação atualizada do expect aqui.
Depurando Testes que Travam
Um problema comum que vemos no rastreador de issues é o Jest "travar" após a execução dos testes. Isso geralmente ocorre porque o código do aplicativo deixa manipuladores (handles) abertos, impedindo o Jest de encerrar. No passado, os usuários recorriam ao --forceExit para corrigir (não recomendado).
Para ajudar a depurar esses problemas, agora detectamos quando o Jest não encerra:

E oferecemos uma nova flag --detectOpenHandles para ajudar a encontrar os manipuladores abertos:

Veja a documentação atualizada da CLI aqui.
Plugins do Modo Watch
Reescrevemos completamente o sistema do modo watch para permitir adicionar plugins personalizados. Agora, os Watch Mode Plugins permitem conectar-se aos eventos do Jest e fornecer opções de menu personalizadas no Menu do Modo Watch. Todos os prompts padrão do Modo Watch são implementados como plugins nesse sistema, e a documentação para criar os seus está disponível aqui.
Com essa mudança, também conseguimos trazer de volta o suporte a typeahead como Watch Mode Plugin via jest-watch-typeahead!

Veja jest-watch-typeahead para documentação e instruções de instalação. Um enorme agradecimento a @rogeliog pelo novo sistema de watch mode plugins e pelo plugin jest-watch-typeahead!
Mudanças que Quebram Compatibilidade
Como em toda versão major, estamos fazendo algumas breaking changes para possibilitar grandes mudanças futuras e elevar a experiência de testes. Aqui estão as principais mudanças que você pode encontrar:
-
Exigir descrições e funções de teste: Agora falhamos testes que não incluem tanto uma função quanto uma descrição.
-
Remover props undefined de snapshots do React: Snapshots menores e comportamento adequado do React.
-
Remover deprecations: Removemos mapCoverage pois não é mais necessário. Além disso, removemos
jest.genMockFunctionejest.genMockFnpois são equivalentes aojest.fn. -
Adicionar nomes de snapshots às falhas: Adicionamos o nome do snapshot (se fornecido) à mensagem de falha para facilitar a identificação do snapshot problemático.
-
Substituir timestamps de mocks: Substituímos os timestamps de mocks por invocationCallOrder, pois dois ou mais mocks frequentemente podem ter o mesmo timestamp, o que impossibilita testar a ordem das chamadas.
-
Adicionar resultados aos snapshots de mocks: Adicionamos os resultados das chamadas de funções mockadas aos snapshots para que tanto as chamadas quanto os resultados da invocação sejam rastreados.
Outras Melhorias
-
Cobertura no modo watch: A cobertura agora é limitada apenas aos arquivos testados no modo watch ou ao usar
--onlyChangede--findRelatedTests. -
Documentação de versões: Adicionamos documentação para cada versão menor desde o Jest 22 e removemos todos os "Requer Jest X.X+" da documentação.
-
Melhores resumos de snapshots: Reformulamos completamente a saída do Resumo de Snapshots para tornar snapshots obsoletos mais informativos.
-
Melhores stack traces: Adicionamos stack traces para erros assíncronos, erros de timeout, expect.assertions e erros não capturados. Também estamos indicando a coluna no quadro de código!
-
Melhor suporte ao React 16: Adiciona suporte a snapshots para
React.Fragment,React.forwardRefeReact.createContext. -
Rastrear valores de retorno e lançamento de mocks: Adiciona
mock.resultsque contém o valor de retorno ou o valor lançado para cada chamada mockada. -
Blazing 🔥: Adicionamos um emblema "blazing" ao README para indicar que o Jest está incrivelmente bom.
Jest Summit
Na semana passada, o Core Team do Jest se reuniu para o Jest Summit no Facebook London, onde trabalhou e lançou o Jest 23, anunciou o Jest Open Collective e apresentou várias palestras:
-
Christoph Nakazawa – Introdução
-
Aaron Abramov – Escrevendo Testes Significativos
-
Rick Hanlon II – Testes de Snapshot Incrivelmente Rápidos no Jest 23
-
Simen Bekkhus – Mensagens de Erro Agradáveis do Jest
-
Matt Phillips – Eleve sua experiência com Jest usando pacotes da comunidade
-
Michele Bertoli – Snapshot todas as coisas
-
Jordan Eldredge – Webamp: Aprenda imitando
A palestra completa está disponível aqui.
A participação foi incrível e pudemos conhecer pessoalmente muitos membros da comunidade de Londres. Obrigado a todos que se juntaram a nós e pelo apoio contínuo! Fiquem atentos ao nosso próximo post, que detalhará o Jest Open Collective e os planos que temos para o futuro.
Como sempre, este lançamento não seria possível sem vocês, a comunidade JavaScript. Somos incrivelmente gratos por termos a oportunidade de trabalhar juntos para melhorar os testes em JavaScript. Se você quiser contribuir com o Jest, não hesite em nos contatar no GitHub ou no Discord.
