Jest 11.0
Cette page a été traduite par PageTurner AI (bêta). Non approuvée officiellement par le projet. Vous avez trouvé une erreur ? Signaler un problème →
Nous annonçons aujourd'hui un passage aux révisions majeures pour Jest, avec Jest 11.0 comme première version majeure. Jest est utilisé depuis des années par les ingénieurs de Facebook et dans nos systèmes d'intégration continue, et nous estimons que Jest dépasse largement le stade d'une "version 1.0" depuis longtemps. Ce changement s'apparente à celui effectué par l'équipe React.
Si vous utilisez Jest 0.9 ou Jest 0.10, la mise à jour devrait être transparente. Tous les changements des derniers mois ont été intégrés dans Jest 11.0.
Nouveautés de Jest 11.0
Intégration de Babel et configuration simplifiée
babel-jest a été intégré au dépôt désormais modulaire de Jest et fonctionne désormais de manière fluide avec Jest. Si vous effectuez une mise à jour depuis une ancienne version de Jest ou souhaitez l'adopter, nous vous recommandons de consulter le guide de démarrage.
Auparavant, Jest proposait des API comme jest.dontMock qui désactive le mock d'un module chargé ultérieurement via la fonction require. Le code de test ressemblait généralement à ceci :
jest.dontMock('LikeButton');
const LikeButton = require('LikeButton'); // LikeButton is unmocked
Cependant, cette approche ne fonctionne plus avec les instructions import ES2015. Selon la spécification, les imports sont remontés en haut de leur bloc de code. Un code écrit ainsi :
jest.dontMock('LikeButton');
import LikeButton from 'LikeButton';
serait en réalité exécuté dans cet ordre :
import LikeButton from 'LikeButton'; // This happens before the dontMock call.
jest.dontMock('LikeButton');
Le module LikeButton serait donc mocké malgré notre appel explicite à dontMock.
Lorsque les dernières versions de Jest et babel-jest sont utilisées conjointement, les appels aux nouvelles API jest.unmock, jest.mock, jest.disableAutomock et jest.enableAutomock sont remontés en haut de leur bloc, avant les instructions import ES2015.
jest.unmock('LikeButton');
import LikeButton from 'LikeButton'; // LikeButton is properly unmocked!
Améliorations du (auto)mock
Nous avons apporté de nombreuses améliorations et corrections de bugs à la fonctionnalité d'automock de Jest, optimisé la prise en charge de npm3 et ajouté de nouvelles API de mock manuel. Beaucoup souhaitent utiliser Jest sans la fonctionnalité d'automock. Une option de configuration globale automock, pouvant être définie sur false, a été ajoutée.
Nous avons également ajouté deux nouvelles API pour simplifier les mocks manuels. jest.mock spécifie une usine de mock manuel pour un test spécifique :
// Implement a mock for a hypothetical "sum" module.
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 mockées :
// Create a mock function
const mockFn = jest.fn(() => 42);
mockFn(); // 42
expect(mockFn.calls.length).toBe(1);
Performances
Nous avons récemment décrit certaines améliorations de performances apportées à Jest. Le temps de démarrage a notamment été optimisé, et nous sommes désormais satisfaits des performances.
Améliorations de Jasmine et des assertions
Lors de son open source, Jest incluait Jasmine 1. Il était conçu pour fonctionner avec n'importe quelle bibliothèque d'assertion, et le support optionnel de Jasmine 2 a été ajouté via une contribution externe fin 2015. Ce changement offre de meilleures performances et des API plus abouties que la version précédente de Jasmine. Ainsi, nous avons migré tous nos tests JavaScript chez Facebook vers Jasmine 2. Avec Jest 11, Jasmine 2 devient la valeur par défaut. Jasmine 1 peut être activé via l'option de configuration testRunner.
Nous avons également apporté de nombreuses mises à jour autour de Jasmine. Les messages d'échec pour les matchers personnalisés des fonctions mockées de Jest ont été améliorés et fonctionnent désormais aussi avec les espions Jasmine. Les tests ignorés (via fit ou fdescribe,) sont désormais correctement rapportés en fin d'exécution.
Autres changements
La commande jest --watch a été entièrement repensée et améliorée. Par défaut, elle exécute désormais uniquement les tests liés aux fichiers modifiés. Pour exécuter tous les tests à chaque changement, utilisez jest --watch=all. La sortie détaillée des logs a également été optimisée et nous avons ajouté des avertissements et messages d'erreur plus explicites. Une option de configuration testEnvironment a été introduite pour personnaliser l'environnement de test. Par exemple, lors du développement d'un service Node, l'environnement spécial node peut remplacer jsdom. Enfin, le site web et toute la documentation ont été complètement refondus.
Tous les changements des derniers mois sont disponibles dans le CHANGELOG.
Contributions et avenir de Jest
Ces six derniers mois, Jest a bénéficié d'évolutions majeures grâce à de nombreux nouveaux contributeurs. Je tiens à remercier tous les contributeurs open source et employés de Facebook pour leur aide à améliorer Jest pour tous. 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 comptons rendre Jest encore meilleur dans les prochains mois. Nous travaillons actuellement sur l'amélioration des tests React (Native), un support renforcé de la couverture de code, et prévoyons d'open-sourcer notre lanceur de tests interne permettant d'exécuter plusieurs projets Jest avec une seule commande.
