Jest 26: Tique-Taque
Esta página foi traduzida por PageTurner AI (beta). Não é oficialmente endossada pelo projeto. Encontrou um erro? Reportar problema →
Quando começamos a reconstruir o Jest há cinco anos, nosso objetivo era criar um executor de testes com tudo incluso e configuração zero que fosse acessível para iniciantes, extensível para quase todos os casos de uso de testes e escalável para grandes projetos. Um dos lançamentos fundamentais foi o Jest 15 que integrou tudo e forneceu padrões eficientes permitindo executar o Jest frequentemente sem configuração. Porém, essa abordagem tem uma grande desvantagem: o Jest instala muitas dependências em seus projetos que você pode não precisar.
Estamos começando a resolver essa limitação trabalhando na redução do tamanho de instalação do Jest, mantendo-o acessível e extensível. Implementamos as seguintes mudanças significativas no Jest 26:
-
[expect, jest-mock, pretty-format]Remoção dos arquivos de buildES5com novo suporte mínimo ES2015 (Node 8) usados apenas para builds em navegadores (#9945)Migração: Com essa mudança, transferimos a responsabilidade de empacotar os pacotes afetados para os usuários, em vez do Jest fornecer pronto para uso, pois vocês conhecem melhor seus ambientes-alvo. Se quiserem de volta, estamos abertos a disponibilizar esses como pacotes separados. PRs são bem-vindos!
-
[jest-config, jest-resolve]Remoção do suporte ao campobrowser(#9943)Migração: Instale o módulo
browser-resolvee use a seguinte configuração:{
"jest": {
"resolver": "<rootDir>/resolver.js"
}
}// resolver.js
const browserResolve = require('browser-resolve');
module.exports = browserResolve.sync; -
Definições TypeScript exigem no mínimo TypeScript v3.8 (#9823)
Com essas mudanças, o Jest 26 agora é 4 MiB menor que o Jest 25.5.4 (53 → 49 MiB). Lembre-se que muitas dependências como Babel provavelmente já fazem parte do seu projeto. O tamanho próprio do Jest foi reduzido em 1.2 MiB (4.3 → 3.1 MiB).
Embora seja um bom começo, não é suficiente para tornar o Jest significativamente mais enxuto. Planejamos reduzir gradualmente o tamanho do Jest e sua árvore de dependências em até 70%. A maioria das mudanças para reduzir a configuração padrão serão pequenas alterações significativas, e queremos trazer a comunidade conosco tanto quanto possível. Portanto, faremos as seguintes mudanças no Jest 27 e Jest 28 usando um processo de lançamento "Tique-Taque":
-
Jest 27 será lançado com o novo executor de testes "
jest-circus" e ambiente Node.js por padrão.jest-jasmine2ejest-environment-jsdomainda serão incluídos para que os usuários possam continuar usando-os alterando uma linha na configuração. -
Jest 28 removerá
jest-jasmine2ejest-environment-jsdomda distribuição padrão do Jest. Os pacotes continuarão sendo mantidos ativamente como parte do projeto Jest e publicados separadamente. Os usuários precisarão instalar esses pacotes para utilizá-los.
Ao atualizar para esses lançamentos principais, o Jest guiará você pelas mudanças necessárias. Se quiser se adiantar e migrar para os novos padrões agora, e seu projeto não requer um ambiente DOM, você pode atualizar para o Jest 26 e adicionar as seguintes opções de configuração:
{
"jest": {
"testEnvironment": "node",
"testRunner": "jest-circus/runner"
}
}
O Jest continuará incluindo babel-jest ativado por padrão. Atualmente, ele possibilita recursos do Jest além de compilar sintaxe JavaScript moderna para versões compatíveis com Node.js e navegadores: Também é responsável pela cobertura de código e simulação de módulos ES no Jest. Atualmente, o Jest oferece suporte experimental para cobertura V8 e suporte nativo a ES Modules (mais detalhes abaixo!). Não é possível simular módulos ES estáticos conforme a especificação sem transformar o código primeiro, então incentivaremos padrões que funcionem sem a transformação atual do Babel. Quando a cobertura V8 e o suporte nativo a ESM estabilizarem no Jest, poderemos remover babel-jest como padrão, mas continuaremos mantendo-o.
Novos timers simulados
Com o Jest 26, lançamos uma nova implementação de timers simulados baseada em @sinonjs/fake-timers. Queríamos fazer isso há anos e estamos felizes por finalmente termos avançado o suficiente para cobrir todos os casos de uso existentes.
A nova implementação inclui recursos extras como simulação de Date, queueMicrotask e outros – veja este README. Ela funciona transparentemente com APIs existentes como jest.runAllTimers() – consulte a documentação em nosso site.
Estamos confiantes nesta implementação, mas não queremos forçar a reescrita de testes que dependem de diferenças sutis entre as versões. No Jest 26, ela será opcional e ativada via jest.useFakeTimers('modern') ou configurando modern na opção timers.
No Jest 27, a implementação "modern" será padrão, mas manteremos suporte à versão legacym via jest.useFakeTimers('legacy'). Se precisar manter o comportamento antigo, adicione esta configuração agora.
Agradecemos a Carl-Erik Kopseng, Benjamin Gruenbaum e outros mantenedores do @sinonjs/fake-timers pela colaboração! Empolgante.
Nova forma de usar o Jest - @jest/globals
O Jest tradicionalmente usa globais como describe, it, test e expect. Para atender quem prefere imports, criamos o pacote @jest/globals: import {expect, jest, test} from '@jest/globals';.
Limitações atuais:
-
Atualmente, os globais ainda existem no ambiente, mas planejamos introduzir um modo para desativá-los no futuro. Da mesma forma, evite
const jest = require('@jest/globals')pois causará erros de declaração, já que a variáveljestainda é global por enquanto. -
Ainda não é possível adicionar matchers personalizados às definições TypeScript usando esta abordagem.
-
Isso permite executar testes sem globais, mas ainda requer o test runner do Jest.
Suporte nativo a ESM
Como mencionado na publicação do Jest 25, temos trabalhado no suporte nativo para ECMAScript Modules (Módulos ECMAScript). Ainda não está estável, mas já está pronto para testes. Adoraríamos receber seu feedback e relatos de bugs! Para uma visão geral do estado atual, você pode conferir este issue ou navegar por todos os issues com a label ES Modules.
Outras Mudanças que Quebram Compatibilidade no Jest 26
-
Remoção do suporte para Node 8 (#9423)
-
[jest-environment-jsdom]Atualização dojsdompara v16 (#9606) -
[jest-runtime]Remoção dos métodosrequire.requireActualerequire.requireMock, já descontinuados há muito tempo (#9854) -
[jest-haste-map]Remoção deprovidesModuleNodeModules(#8535) -
[jest-circus]Falha em testes que usam a callback done e retornam valores (#9129) -
[jest-circus]Lança erro adequado se um teste/hook for definido de forma assíncrona (#8096)
Mantenha-se Seguro
Todos estamos passando por um momento sem precedentes de incerteza. Se você está enfrentando dificuldades financeiras, gostaríamos de usar o fundo do Open Collective do Jest para ajudar novos e antigos colaboradores. Oferecemos recompensas em alguns issues e estamos abertos a oferecer recompensas para qualquer issue aberto atual - você pode sugerir que um issue receba uma recompensa diretamente nele ou entrar em contato com @cpojer via mensagem privada no Twitter.
Por favor, mantenha-se seguro.
