Ir para o conteúdo principal

Jest 11.0

· 5 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 →

Hoje anunciamos uma mudança para revisões principais do Jest, sendo o Jest 11.0 o primeiro lançamento major. O Jest vem sendo usado por engenheiros do Facebook e em nossos sistemas de integração contínua há anos, e acreditamos que ele já ultrapassou há muito tempo um "lançamento 1.0". Isso é similar a uma mudança que a equipe do React fez.

Se você está usando o Jest 0.9 ou Jest 0.10, a atualização deve ser tranquila. Todas as mudanças dos últimos meses foram incorporadas ao Jest 11.0.

Novidades no Jest 11.0

Integração com Babel e Configuração Simplificada

O babel-jest foi incorporado ao repositório recém-modularizado do Jest e agora está perfeitamente integrado. Se você está atualizando de uma versão mais antiga do Jest ou quer adotá-lo, recomendamos ler o Guia de Introdução.

Anteriormente, o Jest fornecia APIs como jest.dontMock que remove o mock de um módulo subsequentemente carregado com require. O código de teste normalmente se parecia com isto:

jest.dontMock('LikeButton');
const LikeButton = require('LikeButton'); // LikeButton is unmocked

Porém, com instruções import do ES2015, isso deixará de funcionar. Conforme a especificação, os imports são içados para o topo do bloco de código. Um código escrito assim:

jest.dontMock('LikeButton');
import LikeButton from 'LikeButton';

quando executado, seria na verdade executado nesta ordem:

import LikeButton from 'LikeButton'; // This happens before the dontMock call.
jest.dontMock('LikeButton');

O módulo LikeButton seria portanto mockado mesmo que chamemos explicitamente dontMock.

Quando as versões mais recentes do Jest e babel-jest são usadas juntas, as chamadas para as novas APIs jest.unmock, jest.mock, jest.disableAutomock e jest.enableAutomock são içadas para o topo do bloco, antes das instruções import do ES2015.

jest.unmock('LikeButton');
import LikeButton from 'LikeButton'; // LikeButton is properly unmocked!

Melhorias no (Auto)Mocking

Fizemos diversas melhorias e correções de bugs no recurso de automocking do Jest, aprimoramos o suporte ao npm3 e adicionamos novas APIs de mock manual. Muitas pessoas expressaram desejo de usar o Jest com o automocking desativado. Foi adicionada uma opção de configuração global automock, que pode ser definida como false.

Também adicionamos duas novas APIs para simplificar mocks manuais. jest.mock especifica uma fábrica de mock manual para um teste específico:

// Implement a mock for a hypothetical "sum" module.
jest.mock('sum', () => {
return (a, b) => a + b;
});

const sum = require('sum');
sum(1, 4); // 5

E jest.fn foi adicionado para facilitar a criação de funções mock:

// Create a mock function
const mockFn = jest.fn(() => 42);
mockFn(); // 42
expect(mockFn.calls.length).toBe(1);

Desempenho

Recentemente escrevemos sobre melhorias de desempenho que implementamos no Jest. Notavelmente, o tempo de inicialização foi aprimorado e agora estamos em uma posição confortável em relação ao desempenho.

Aprimoramentos no Jasmine e Assertions de Teste

Quando o Jest foi open source, ele vinha com Jasmine 1. O Jest foi projetado para funcionar com qualquer biblioteca de assertions, e o suporte opcional ao Jasmine 2 foi adicionado via contribuição externa no final do ano passado. Essa mudança oferece melhor desempenho e APIs superiores em relação à versão anterior do Jasmine. Assim, convertemos todos nossos testes JavaScript no Facebook para Jasmine 2. Com o Jest 11, estamos tornando o Jasmine 2 o novo padrão. O Jasmine 1 pode ser habilitado através da opção de configuração testRunner.

Também fizemos várias atualizações relacionadas ao Jasmine. As mensagens de falha para matchers personalizados das funções mock do Jest foram aprimoradas e agora funcionarão também com spies do Jasmine. Testes ignorados ao usar fit ou fdescribe, agora são relatados corretamente ao final da execução.

Outras Mudanças

O comando jest --watch foi reescrito e aprimorado. Por padrão, agora ele executa apenas os testes relacionados aos arquivos alterados. Se você quiser executar todos os testes a cada alteração, pode usar jest --watch=all. A saída detalhada do logger também foi melhorada e adicionamos mais avisos e mensagens de erro úteis. Adicionamos uma opção de configuração testEnvironment para personalizar o ambiente de teste. Por exemplo, ao criar um serviço Node, pode ser usado um ambiente especial node em vez de jsdom. Por fim, o site e toda a documentação foram completamente reformulados.

Todas as alterações dos últimos meses podem ser encontradas no CHANGELOG.

Contribuições e o futuro do Jest

Nos últimos seis meses, o Jest recebeu mudanças significativas de um grande número de novos colaboradores. Gostaria de agradecer a todos os colaboradores de código aberto e funcionários do Facebook pela ajuda em tornar o Jest melhor para todos. Novos colaboradores: Alexander Juarez, Christian Lentfort, Cristian Carlesso, Dan Abramov, Dmitrii Abramov, Evan Jacobs, James Friend, James Ide, Jeff Carpenter, Joe Lencioni, Michael Diolosa, Nik Graf, Pavel Prokopenko, Pavel Volokitin, Sebastian Mayr e ShihChi Huang.

Com o apoio de vocês, estamos ansiosos para tornar o Jest ainda melhor nos próximos meses. Atualmente, estamos trabalhando em melhorias para testes com React (Native), suporte aprimorado à cobertura de código e planejamos abrir o código do nosso executor de testes interno que permite executar vários projetos Jest com um único comando de execução.