Maison >interface Web >js tutoriel >Comment tester stopPropagation () dans la bibliothèque de tests React
stopPropagation()
dans React La mise en œuvre correcte stopPropagation()
est vitale lorsque vous traitez des événements de clic imbriqués dans React. Au lieu de vérifier directement l'appel de stopPropagation()
, concentrez-vous sur le test de son résultat: l'événement se propage ou non?
Cet article compare deux approches:
✅ Tester l'effet de stopPropagation()
(propagation des événements).
✅ se moquant de la méthode stopPropagation()
.
✅ Déterminer quelle méthode est supérieure et quand utiliser chacun.
La méthode optimale teste l'effet de stopPropagation()
en enroulant le composant dans un parent <div>
avec un gestionnaire onClick
. Nous vérifions ensuite si l'événement bouillonne au parent.
Exemple: Empêcher la propagation
<code class="language-javascript">import { render, screen } from "@testing-library/react"; import userEvent from "@testing-library/user-event"; import { FormElementsList } from "@/components/FormElementsList"; it("prevents event propagation on click", async () => { const onOuterClick = jest.fn(); render( <div onClick={onOuterClick}> <FormElementsList /> </div> ); const textInputElement = screen.getByText("Text Input"); await userEvent.click(textInputElement); expect(onOuterClick).toHaveBeenCalledTimes(0); // Event propagation prevented });</code>
Pourquoi cela fonctionne:
<div>
onClick
(onOuterClick
) agit comme un auditeur. stopPropagation()
fonctionne correctement dans FormElementsList
, cliquer sur un élément ne doit pas déclencher onOuterClick
. expect(onOuterClick).toHaveBeenCalledTimes(0)
confirme la prévention réussie des événements. stopPropagation()
Alternativement, vous pouvez dire directement l'appel de stopPropagation()
en se moquant de l'événement et en suivant l'appel de la fonction.
Exemple: moqueur stopPropagation()
<code class="language-javascript">import { render, screen } from "@testing-library/react"; import { FormElementsList } from "@/components/FormElementsList"; it("calls stopPropagation() on click", async () => { render(<FormElementsList />); const textInputElement = screen.getByText("Text Input"); const event = new MouseEvent("click", { bubbles: true }); jest.spyOn(event, "stopPropagation"); textInputElement.dispatchEvent(event); expect(event.stopPropagation).toHaveBeenCalled(); });</code>
Pourquoi cela fonctionne:
jest.spyOn(event, "stopPropagation")
surveille l'appel de la fonction. dispatchEvent(event)
déclenche manuellement le clic. expect(event.stopPropagation).toHaveBeenCalled()
assure l'exécution de stopPropagation()
. Method | Pros | Cons |
---|---|---|
Testing Event Propagation | Tests actual user behavior | Doesn't directly confirm stopPropagation() call |
Mocking stopPropagation()
|
Directly confirms stopPropagation() call |
Tests implementation, not behavior |
Recommandation stopPropagation()
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!