Rumah > hujung hadapan web > tutorial js > Cara Menguji Stoppropagation () di Perpustakaan Ujian React

Cara Menguji Stoppropagation () di Perpustakaan Ujian React

Susan Sarandon
Lepaskan: 2025-01-29 20:34:13
asal
657 orang telah melayarinya

How to Test stopPropagation() in React Testing Library

Pengenalan: Ujian

dalam React stopPropagation()

dengan betul melaksanakan

adalah penting apabila berurusan dengan peristiwa klik bersarang di React. Bukannya mengesahkan panggilan langsung stopPropagation(), fokus pada ujian hasilnya: adakah acara menyebarkan atau tidak? stopPropagation()

Artikel ini membandingkan dua pendekatan:

✅ Menguji kesan

(penyebaran peristiwa). stopPropagation()

✅ Mengejar kaedah

. stopPropagation()

✅ Menentukan kaedah mana yang lebih baik dan bila menggunakan setiap.

Pendekatan Terbaik: Ujian Penyebaran Acara

Kesan Ujian Kaedah Optimal

dengan membungkus komponen dalam ibu bapa stopPropagation() dengan pengendali <div>. Kami kemudian menyemak sama ada peristiwa gelembung sehingga ibu bapa. onClick Contoh

: Mencegah penyebaran

<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>
Salin selepas log masuk

Kenapa ini berfungsi:

    ibu bapa
  1. 's <div> handler () bertindak sebagai pendengar. onClick onOuterClick jika
  2. berfungsi dengan betul dalam
  3. , mengklik elemen tidak boleh mencetuskan stopPropagation(). FormElementsList onOuterClick
  4. mengesahkan pencegahan acara yang berjaya.
  5. expect(onOuterClick).toHaveBeenCalledTimes(0)
  6. Alternatif: Mengejar

stopPropagation() Sebagai alternatif, anda boleh mengesahkan panggilan langsung

dengan mengejek acara dan menjejaki panggilan fungsi.

stopPropagation()

Contoh: mengejek

stopPropagation()

Kenapa ini berfungsi:
<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>
Salin selepas log masuk

memantau panggilan fungsi.
  • jest.spyOn(event, "stopPropagation") secara manual mencetuskan klik.
  • dispatchEvent(event) Memastikan
  • 's pelaksanaan.
  • expect(event.stopPropagation).toHaveBeenCalled() stopPropagation() memilih kaedah yang betul
  • kaedah pro cons Penyebaran acara ujian Menguji tingkah laku pengguna sebenar tidak secara langsung mengesahkan panggilan Mocking

    secara langsung mengesahkan panggilan pelaksanaan ujian, bukan tingkah laku
    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
    Cadangan

    Mengutamakan ujian tingkah laku sebenar ke atas butiran pelaksanaan untuk pemeliharaan yang lebih baik. Kaedah penyebaran acara umumnya lebih disukai. Gunakan mengejek hanya apabila benar -benar diperlukan untuk mengesahkan panggilan khusus ke

    . stopPropagation()

Atas ialah kandungan terperinci Cara Menguji Stoppropagation () di Perpustakaan Ujian React. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan