Aller au contenu principal

Jest 11.0

· 5 minutes de lecture

Aujourd'hui, nous annonçons un passage à la version majeure de Jest avec Jest 11.0 comme première version majeure. Jest a été utilisé par les ingénieurs de Facebook et sur nos systèmes d’intégration continue depuis des années et nous pensons que Jest a été bien plus qu’un “1. » pour une longue période. This is similar to a change the React team has made.

Si vous utilisez Jest 0.9 ou Jest 0.10, la mise à jour devrait être transparente. Tous les changements de ces derniers mois ont été introduits dans Jest 11.0.

New in Jest 11.0

Intégration de Babel et configuration simplifiée

babel-jest was adopted within the newly modularized Jest repository and it is now seamlessly integrated into Jest. If you are upgrading from an older version of Jest or are looking to adopt Jest, we recommend reading the Getting Started guide.

Previously Jest provided APIs such as jest.dontMock which unmocks a module that is subsequently being required using the require function. Les tests de code ressemblaient généralement à ceci :

jest.dontMock('LikeButton');
const LikeButton = require('LikeButton'); // LikeButton est démocked

Cependant, avec les déclarations d'importation ES2015, cela ne fonctionnera plus. Per the specification imports are hoisted to the top of their code block. Code écrit comme ceci :

jest.dontMock('LikeButton');
importez le LikeButton depuis 'LikeButton';

lorsqu'il est exécuté, serait en fait exécuté dans cet ordre:

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

The LikeButton module would therefore be mocked even though we explicitly call dontMock.

When the latest versions of Jest and babel-jest are used together, calls to the new APIs jest.unmock, jest.mock, jest.disableAutomock and jest.enableAutomock are hoisted to the top of their block, before ES2015 import statements.

jest.dontMock('LikeButton');
const LikeButton = require('LikeButton'); // LikeButton est démocked!

(Auto)Mocking Améliorations

Nous avons apporté de nombreuses améliorations et corrections de bugs à la fonctionnalité d'automocking de Jest, amélioré le support de npm3 et ajouté de nouvelles API manuelles. De nombreuses personnes ont exprimé un désir d'utiliser Jest avec la fonction d'automatisation désactivée. A global configuration option automock, which can be set to false, was added.

Nous avons également ajouté deux nouvelles API pour simplifier les bouchons manuels. jest.mock specifies a manual mock factory for a specific test:

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

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

And jest.fn was added to make it easier to create mock functions:

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

Performance

We recently wrote about some performance improvements we've made in Jest. Plus particulièrement, le temps de démarrage a été amélioré et nous sommes maintenant dans un endroit confortable en ce qui concerne les performances.

Améliorations du Jasmine et du Test Assertion

Quand Jest a été open source, il a été expédié avec Jasmine 1. Jest was designed to work with any test assertion library and optional Jasmine 2 support was added through an external contribution at the end of last year. Ce changement apporte de meilleures performances et fournit de meilleures APIs par rapport à la version précédente de Jasmine. Ainsi, nous avons converti tous nos tests JavaScript sur Facebook en Jasmine 2. Avec Jest 11, nous faisons de Jasmine 2 la nouvelle valeur par défaut. Jasmine 1 can be enabled through the testRunner configuration option.

Nous avons également fait de nombreuses mises à jour autour de Jasmine. Les messages d'échec pour les correspondants personnalisés fournis pour les fonctions de bouchon de Jest ont été améliorés et fonctionneront maintenant aussi pour les espions Jasmine. Skipped tests, when using fit or fdescribe, are now properly reported at the end of a test run.

Autres modifications

The jest --watch command has been rewritten and improved. Par défaut, il exécute maintenant uniquement les tests liés aux fichiers modifiés. If you want to run all tests on every change, you can run jest --watch=all. La sortie du journal détaillé a également été améliorée et nous avons ajouté des avertissements et des messages d'erreur plus utiles. We added a testEnvironment configuration option to customize the test environment. For example, when building a node service, a special node environment instead of jsdom can be used. Enfin, le site web et toute la documentation ont été entièrement réécrits.

All changes from the past few months can be found in the CHANGELOG.

Contributions et avenir de Jest

Au cours des six derniers mois, Jest a reçu des changements significatifs de la part d'un grand nombre de nouveaux contributeurs. J'aimerais remercier tous les contributeurs open source et les employés de Facebook pour leur aide à rendre Jest meilleur pour tout le monde. Nouveaux contributeurs: 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 et ShihChi Huang.

Avec votre soutien, nous sommes impatients de rendre Jest encore meilleur dans les mois à venir. Nous travaillons actuellement sur l'amélioration des tests React (Native), une meilleure prise en charge de la couverture de code et planifie d'ouvrir la source de notre exécuteur de test interne qui permet à plusieurs projets Jest d'être exécutés avec une seule commande d'exécution.