Aller au contenu principal

🃏 Jest 19 : Mode Watch Immersive et AmĂ©liorations de la Plateforme de Test

· 9 min de lecture
Rogelio Guzman
Rogelio Guzman
Traduction BĂȘta Non Officielle

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 sommes ravis de livrer aujourd'hui la version 19 de la plateforme de test Jest. Il s'agit de la plus importante version de Jest que nous ayons publiée à ce jour, et nous sommes trÚs enthousiastes de vous montrer ce que nous avons construit ces deux derniers mois :

Mode Watch Immersif​

Nous avons entiÚrement réécrit le mode watch pour le rendre instantané et plus extensible. Le résultat offre une expérience véritablement immersive : les tests se relancent instantanément aprÚs une modification de fichier et nous avons simplifié la sélection des tests pertinents.

Mises à jour des Snapshots​

Nous avons apporté quelques modifications au format des snapshots. Nous n'effectuons ce type de changements que rarement et uniquement s'ils améliorent réellement le fonctionnement des snapshots. En plus d'introduire un numéro de version pour les snapshots, nous avons intégré plusieurs améliorations que nous souhaitions apporter au format depuis un certain temps :

  • Suppression du prĂ©fixe "test" dans les noms de snapshots provenant des appels test ou it de haut niveau.

  • AmĂ©lioration de l'affichage des Ă©lĂ©ments React pour rĂ©duire les changements lorsque la derniĂšre prop d'un Ă©lĂ©ment est modifiĂ©e.

  • Renforcement du mĂ©canisme d'Ă©chappement des caractĂšres pour le rendre plus robuste.

Avant :

exports[`test snap 1`] = `
<header>
<h1>
Jest \"19\"
</h1>
<Subtitle
name="Painless JavaScript Testing" />
</header>
`;

AprĂšs (pas de prĂ©fixe "test", meilleur rendu JSX, en-tĂȘte de version) :

// Jest Snapshot v1, https://goo.gl/fbAQLP

exports[`snap 1`] = `
<header>
<h1>
Jest "19"
</h1>
<Subtitle
name="Painless JavaScript Testing"
/>
</header>
`;

Nous avons jugé opportun d'introduire des snapshots versionnés pour garantir que tous les développeurs utilisent une version compatible de Jest. Voici comment nous vous alertons de la nécessité de mettre à jour votre snapshot :

version-du-snapshot

Veuillez vous assurer de réinitialiser toutes les modifications locales avant la mise à jour pour une transition fluide et éviter d'inclure des changements indésirables provenant de tests en échec dans vos nouveaux snapshots.

AmĂ©lioration de l'affichage des tests ignorĂ©s​

Les tests ignorés sont désormais affichés sur une seule ligne au lieu de les lister individuellement en mode verbeux ou dans une suite unique. Cela vous permettra de vous concentrer sur les tests actuellement pertinents. Cela occupe également beaucoup moins d'espace !

tests-ignorés

Nouveaux arguments CLI​

Jest 19 inclut deux nouveaux arguments liés à la couverture de code, utilisables en ligne de commande :

  • --collectCoverageFrom

  • --coverageDirectory

Nous générons désormais une erreur pour les arguments CLI invalides au lieu de les ignorer. Mais nous vous accompagnons avec des messages d'erreur utiles comme celui-ci, par exemple lorsque vous tentez d'exécuter jest --watc :

erreur-cli

AmĂ©liorations d'expect​

Nous approchons d'une quasi-paritĂ© fonctionnelle avec le package npm expect. Michael Jackson, l'auteur du package, a acceptĂ© de le cĂ©der au projet Jest, ce qui signifie que jest-matchers sera renommĂ© en expect. Comme notre version d'expect n'est pas destinĂ©e Ă  ĂȘtre entiĂšrement compatible, Christopher Chedeau travaille sur un codemod pour faciliter la transition. Christopher a Ă©galement contribuĂ© Ă  plusieurs amĂ©liorations de jest-matchers permettant son utilisation hors de Jest, y compris dans les navigateurs.

eslint-plugin-jest – notre propre plugin ESLint​

GrĂące Ă  Jonathan Kim, Jest dispose enfin de son propre plugin ESLint officiel. Il expose trois rĂšgles :

  • no-disabled-tests - cette rĂšgle empĂȘche de commettre accidentellement des tests dĂ©sactivĂ©s.

  • no-focused-tests - cette rĂšgle Ă©vite de commettre des tests focalisĂ©s qui dĂ©sactiveraient tous les autres tests de la mĂȘme suite.

  • no-identical-title - interdit les titres identiques dans les noms de tests.

Vous pouvez l'installer via npm install --save-dev eslint-plugin-jest ou yarn add --dev eslint eslint-plugin-jest, et l'activer en ajoutant {"plugins": ["jest"]} Ă  votre configuration ESLint.

Nouveau package public : jest-validate​

Lors du refactoring du code de validation et de normalisation de la configuration de Jest, nous avons été si satisfaits des nouveaux messages d'erreur que nous l'avons extrait dans son propre module pour le partager avec tous. Avec Jest 19, nous accueillons jest-validate dans notre famille de packages autonomes.

jest-validate est un outil générique de validation de configuration qui vous assiste avec des avertissements, erreurs et messages de dépréciation dans vos outils JavaScript. Il peut aussi montrer aux utilisateurs des exemples conviviaux de configuration correcte et propose une API simple mais puissante. Nous espérons qu'il sera un excellent ajout à vos projets !

validate

Nous sommes heureux d'annoncer que jest-validate valide les options de configuration de prettier depuis la v0.12. N'hésitez pas à l'ajouter à votre projet, l'essayer, nous faire des retours et l'améliorer via des pull requests sur GitHub.

AmĂ©lioration des matchers asymĂ©triques​

Nous avons déplacé l'implémentation des matchers asymétriques de Jasmine vers Jest, ce qui nous a permis d'améliorer encore l'expérience utilisateur. Résultat : les matchers asymétriques sont maintenant joliment formatés, nous avons ajouté le nouveau matcher expect.stringContaining() et nous les avons associés à expect.toMatchObject() pour combiner le meilleur des deux :

asymmetric-matchers

Mocks manuels amĂ©liorĂ©s​

Avec cette derniĂšre version, les mocks manuels fonctionnent enfin avec des dossiers imbriquĂ©s. Par exemple, __mocks__/react-native/Libraries/Text/Text.js fonctionnera dĂ©sormais comme prĂ©vu pour mocker le bon module. Nous avons aussi corrigĂ© les problĂšmes avec les mocks virtuels et les dĂ©pendances transitives, et amĂ©liorĂ© moduleNameMapper pour ne pas Ă©craser les mocks lorsque plusieurs motifs mappent vers le mĂȘme fichier.

Changements cassants​

Dans le cadre de nos nettoyages et corrections, nous avons supprimĂ© l'option de configuration mocksPattern qui n'a jamais Ă©tĂ© officiellement supportĂ©e. Nous avons aussi renommĂ© l'option testPathDirs en roots pour mieux expliquer son utilitĂ©. La configuration par dĂ©faut de roots est ["<rootDir>"] et peut ĂȘtre personnalisĂ©e pour inclure plusieurs rĂ©pertoires. L'option rootDir a toujours Ă©tĂ© principalement utilisĂ©e comme token pour d'autres configurations, et ce renommage devrait clarifier la configuration de Jest.

Documentation repensĂ©e​

Comme vous avez peut-ĂȘtre dĂ©jĂ  vu, Hector Ramos et Kevin Lacker ont donnĂ© un nouveau look Ă  la documentation de Jest. Nous avons changĂ© l'organisation du site qui prĂ©sente dĂ©sormais les Docs et l'API comme des pages sĂ©parĂ©es :

La page d'accueil a Ă©tĂ© entiĂšrement repensĂ©e pour mieux dĂ©crire ce qu'est Jest : « Plateforme de test sans configuration ». Nous nous sommes aussi assurĂ©s qu'elle soit plus lisible sur mobile. Et pour ceux qui utilisent RSS – nous proposons enfin un flux pour notre blog.

ActualitĂ©s de la communauté​

Enfin, nous sommes heureux d'annoncer que le runner de tests ava a adopté des parties de la plateforme Jest et propose désormais un support basique des snapshots et utilise pretty-format. La consolidation de l'infrastructure de test facilite l'apprentissage du test d'applications et permet de partager les meilleures pratiques. Nous avons hùte de découvrir ce que nous pourrons apprendre des bibliothÚques de test existantes à l'avenir.

Le journal des modifications complet est disponible sur GitHub. Jest 19 est le fruit d'un véritable effort communautaire JavaScript avec 17 contributeurs pour cette version. Nous remercions chacun d'entre vous pour votre aide à rendre ce projet formidable.

Cet article de blog a Ă©tĂ© rĂ©digĂ© par Rogelio Guzman et MichaƂ PierzchaƂa.