recherche
Maisoninterface Webtutoriel CSSTest des crochets React avec la bibliothèque des tests enzymatiques et réagis

Tester les 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:

  1. Rendu des composants: Vérifiez le composant avec succès.
  2. Affichage de tâches initial: confirmez que les éléments de tâche initiaux sont affichés correctement.
  3. Ajout d'une nouvelle tâche: testez les fonctionnalités de l'ajout d'un nouvel élément de tâche.
  4. 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

  1. Installation: npm install --save-dev enzyme enzyme-adapter-react-16
  2. 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 ()});
  1. 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

  1. Installation: npm install --save-dev @testing-library/jest-dom @testing-library/react
  2. 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!

Déclaration
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Quelle est la spécificité de @rules, comme @keyframes et @media?Quelle est la spécificité de @rules, comme @keyframes et @media?Apr 18, 2025 am 11:34 AM

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?

Pouvez-vous nist @media et @Support Queries?Pouvez-vous nist @media et @Support Queries?Apr 18, 2025 am 11:32 AM

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.

Buste de cache de gorgée rapideBuste de cache de gorgée rapideApr 18, 2025 am 11:23 AM

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

À la recherche d'une pile qui surveille la qualité et la complexité de CSSÀ la recherche d'une pile qui surveille la qualité et la complexité de CSSApr 18, 2025 am 11:22 AM

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

Le datalist est destiné à suggérer des valeurs sans appliquer de valeursLe datalist est destiné à suggérer des valeurs sans appliquer de valeursApr 18, 2025 am 11:08 AM

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

Conférence avant à ZurichConférence avant à ZurichApr 18, 2025 am 11:03 AM

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é

Construire une application sans serveur complète avec des travailleurs CloudFlareConstruire une application sans serveur complète avec des travailleurs CloudFlareApr 18, 2025 am 10:58 AM

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

Création de routes dynamiques dans une application NuxtCréation de routes dynamiques dans une application NuxtApr 18, 2025 am 10:53 AM

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

See all articles

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques moisBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
1 Il y a quelques moisBy尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. Vous avez un jeu croisé?
1 Il y a quelques moisBy尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Dreamweaver Mac

Dreamweaver Mac

Outils de développement Web visuel

PhpStorm version Mac

PhpStorm version Mac

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

MantisBT

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

Adaptateur de serveur SAP NetWeaver pour Eclipse

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

Version Mac de WebStorm

Version Mac de WebStorm

Outils de développement JavaScript utiles