


Test des crochets React avec la bibliothèque des tests enzymatiques et réagis
Construire des applications de réaction robustes avec des crochets nécessite des tests rigoureux. Ce didacticiel montre comment tester efficacement les crochets React à l'aide de la bibliothèque enzymatique et des tests de réaction, en tirant parti d'un exemple d'application de tâches. Nous couvrirons les scénarios de test clés et les meilleures pratiques pour assurer le code sans bogue.
Ce guide assume la familiarité avec les principes fondamentaux des tests de plaisanterie et de réaction. Si vous êtes nouveau dans Enzyme, envisagez de passer en revue son intégration avec Jest dans les applications React avant de continuer.
Tester des scénarios
Notre composant à faire sera testé contre ces scénarios:
- Rendu des composants: Vérifiez le composant avec succès.
- Affichage de tâches initial: confirmez que les éléments de tâche initiaux sont affichés correctement.
- Ajout d'une nouvelle tâche: testez les fonctionnalités de l'ajout d'un nouvel élément de tâche.
- Suppression d'une tâche: Vérifiez la possibilité de supprimer un élément de tâche.
Voici le code du composant TAIS:
Importer React, {UseState, Useref} de "React"; const todo = () => { const [todos, setodos] = usestate ([[ {id: 1, élément: "corriger les bogues"}, {id: 2, article: "Sortez la poubelle"} ])); const todoref = useRef (); const RemoveTodo = id => { Settodos (todos.filter (todo => todo.id! == id)); }; const addtodo = data => { Soit id = todos.length 1; colons ([[ ... todos, { identifiant, Article: données } ])); }; const handlenewtodo = e => { E.PreventDefault (); const item = todoref.current; addTodo (item.value); item.value = ""; }; retour ( <div classname="container"> {/ * Correction ClassName à classname * /} <div classname="row"> {/ * Correction ClassName à classname * /} <div classname="col-md-6"> {/ * Correction ClassName à classname * /} <h2 id="Ajouter-Todo">Ajouter Todo</h2> </div> </div> <div classname="row"> {/ * Correction ClassName à classname * /} <div classname="col-md-6"> {/ * Correction ClassName à classname * /} <form onsubmit="{handleNewTodo}"> {/ * Ajout de la balise de formulaire * /} <input type="text" ref="{todoRef}" data-testid="input"> {/ * Ajout de données de données * /} <button type="submit" data-testid="add-button">Ajouter la tâche</button> {/ * Ajout d'un test de données * /} </form> </div> </div> <div classname="row todo-list"> {/ * Correction ClassName à classname * /} <div classname="col-md-6"> {/ * Correction ClassName à classname * /} <h3 id="Listes">Listes</h3> {! Todos.Length? ( <div classname="no-task">Aucune tâche!</div> ): ( <ul data-testid="todos"> {/ * Ajout de données de données * /} {todos.map (todo => { retour ( <li key="{todo.id}"> {/ * Valeur clé corrigée * /} <div> {todo.item} <button data-testid="delete-button" onclick="{()"> removetodo (todo.id)}> x</button> {/ * ajout de données de données et onclick * /} </div> </li> )); })} </ul> )} </div> </div> </div> )); }; Exportation par défaut TODO;
Remarque: les attributs classname
ont été corrigés à className
dans le code ci-dessus. De plus, des attributs data-testid
ont été ajoutés pour des tests plus faciles avec la bibliothèque de tests React.
Test avec enzyme
- Installation:
npm install --save-dev enzyme enzyme-adapter-react-16
- Configuration de l'enzyme (setipeTests.js):
enzyme d'importation à partir de "Enzyme"; adaptateur d'importation de "Enzyme-adapter-react-16"; Enzyme.configure ({adaptateur: nouvel adaptateur ()});
- Tests (todo.test.js):
importer réagir à partir de "réagir"; Import {peuple, monter} à partir de "Enzyme"; Importer Todo depuis "../todo"; décrire ("todo", () => { it ("rende", () => { peu profond(<todo></todo> )); }); il ("affiche les tâches initiales", () => { const Wrapper = Mount (<todo></todo> )); attendre (wrapper.find ("li")). tohavelength (2); }); it ("ajoute un nouvel élément", () => { const Wrapper = Mount (<todo></todo> )); wrapper.find ("input"). instance (). Value = "Fix Failliing Test"; wrapper.find ('[type = "soumettre"]'). Simulate ("soumettre"); // Simuler soumettre, pas cliquer attendre (wrapper.find ("li")). tohavelength (3); attendre (wrapper.find ("li"). Last (). text ()). toContain ("Correction d'échec du test"); // Affirmation améliorée }); it ("supprime un élément", () => { const Wrapper = Mount (<todo></todo> )); wrapper.find ('[data-testid = "Delete-button"]'). First (). Simulate ("cliquez"); attendre (wrapper.find ("li")). tohavelength (1); }); });
Test avec la bibliothèque de tests React
- Installation:
npm install --save-dev @testing-library/jest-dom @testing-library/react
- Tests (todo.test.js):
importer réagir à partir de "réagir"; import {rendu, foyervent, écran} à partir de "@ test-library / react"; Importer Todo depuis "../todo"; Importer "@ test-bibrary / jest-dom"; décrire ("todo", () => { il ("affiche les tâches initiales", () => { rendre(<todo></todo> )); attendre (screen.getByTestid ("todos"). enfants.length) .tobe (2); }); it ("ajoute une nouvelle tâche", () => { rendre(<todo></todo> )); FireEvent.Change (Screen.GetByTestid ("Input"), {Target: {Value: "New Task"}}); FireEvent.Click (Screen.GetByTestid ("Add-Button")); attendre (screen.getByTestid ("Todos"). Children.Length) .Tobe (3); }); it ("supprime un tât", () => { rendre(<todo></todo> )); FireEvent.Click (Screen.GetAllByTestid ("Delete-Button") [0]); attendre (Screen.getByTestid ("Todos"). Children.Length) .Tobe (1); }); });
N'oubliez pas d'ajuster les chemins de fichier au besoin pour la structure de votre projet. Cette version améliorée fournit des tests plus robustes et maintenables. L'utilisation du data-testid
rend les tests plus résilients aux modifications de la structure du composant.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

J'ai eu cette question l'autre jour. Ma première pensée est: une question étrange! La spécificité concerne les sélecteurs, et les rubriques ne sont pas des sélecteurs, donc ... non pertinents?

Oui, vous le pouvez, et cela n'a pas vraiment d'importance dans quel ordre. Un préprocesseur CSS n'est pas requis. Il fonctionne dans CSS ordinaire.

Vous devriez à coup sûr définir des en-têtes de cache éloignés sur vos actifs comme CSS et JavaScript (et des images et polices et quoi que ce soit d'autre). Cela dit au navigateur

De nombreux développeurs écrivent sur la façon de maintenir une base de code CSS, mais peu d'entre eux écrivent sur la façon dont ils mesurent la qualité de cette base de code. Bien sûr, nous avons

Avez-vous déjà eu un formulaire qui devait accepter un petit texte arbitraire? Comme un nom ou autre chose. C'est exactement à quoi sert. Il y a beaucoup de

Je suis tellement excité de me diriger vers Zurich, en Suisse pour la conférence de Front (j'adore ce nom et URL!). Je n'ai jamais été en Suisse auparavant, donc je suis excité

L'un de mes développements préférés dans le développement de logiciels a été l'avènement de Serverless. En tant que développeur qui a tendance à s'enliser dans les détails

Dans cet article, nous utiliserons une démo de magasin de commerce électronique que j'ai construit et déployé sur Netlify pour montrer comment nous pouvons faire des itinéraires dynamiques pour les données entrantes. C'est assez


Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Dreamweaver Mac
Outils de développement Web visuel

PhpStorm version Mac
Le dernier (2018.2.1) outil de développement intégré PHP professionnel

MantisBT
Mantis est un outil Web de suivi des défauts facile à déployer, conçu pour faciliter le suivi des défauts des produits. Cela nécessite PHP, MySQL et un serveur Web. Découvrez nos services de démonstration et d'hébergement.

Adaptateur de serveur SAP NetWeaver pour Eclipse
Intégrez Eclipse au serveur d'applications SAP NetWeaver.

Version Mac de WebStorm
Outils de développement JavaScript utiles