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. Ceci est similaire à un changement l'équipe React a fait.

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. Si vous effectuez une mise à jour depuis une ancienne version de Jest ou si vous souhaitez adopter Jest, Nous vous recommandons de lire le guide pour commencer.

Jest a précédemment fourni des API telles que jest.dontMock qui démoque un module qui est par la suite requis en utilisant la fonction require. 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. Par la spécification imports sont hissés en haut de leur bloc de code. 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 depuis 'LikeButton'; // Cela se produit avant l'appel de dontMock.
jest.dontMock('LikeButton');

Le module LikeButton serait donc bouché, même si nous appelons explicitement dontMock.

Quand les dernières versions de Jest et babel-jest sont utilisées ensemble, appelle aux nouvelles APIs jest. nmock, jest.mock, jest. isableAutomock et jest.enableAutomock sont hissés en haut de leur bloc, avant les instructions d'importation ES2015.

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. Une option de configuration globale automock, qui peut être définie à false, a été ajoutée.

Nous avons également ajouté deux nouvelles API pour simplifier les bouchons manuels. jest.mock spécifie une usine manuelle de bouchon pour un test spécifique :

// Implémente un bouchon pour un module hypothétique "sum".
jest.mock('sum', () => {
return (a, b) => a + b;
});

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

Et jest.fn a été ajouté pour faciliter la création de fonctions de bouchon :

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

Performance

Nous avons récemment écrit sur quelques améliorations de performance que nous avons faites à 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 peut être activé via l'option de configuration testRunner.

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. Les tests ignorés, lorsque vous utilisez fit ou fdescribe, sont maintenant correctement signalés à la fin d'une exécution de test.

Autres modifications

La commande jest --watch a été réécrite et améliorée. Par défaut, il exécute maintenant uniquement les tests liés aux fichiers modifiés. Si vous voulez exécuter tous les tests à chaque modification, vous pouvez exécuter 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. Nous avons ajouté une option de configuration testEnvironment pour personnaliser l'environnement de test. Par exemple, lors de la construction d'un service de nœud, un environnement spécial node au lieu de jsdom peut être utilisé. 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.