FluentStack

User Events

Mode tersedia: dark, light, paper
MasukDaftar
Advanced · Level 13: TestingAdvanced70 menitBahasa Indonesia

User Events

Menguji click dan interaction sederhana lewat user-event lalu memeriksa perubahan yang user lihat.

StatusMemuat progres
ProgresMemuat...

...

Memuat progres

Menyiapkan langkah berikutnya

Tujuan belajar

  • Menjelaskan alasan test perlu mensimulasikan interaction user
  • Membuat user-event instance dengan setup
  • Menulis test async untuk click yang mengubah UI
  • Memeriksa output setelah action tanpa mengakses state component
User EventInteraction TestReact Testing LibraryAsync Test

Isi lesson

6 blok
  1. 1.
    Jangan hanya test tampilan awal ketika behavior berubah setelah actionBelum selesaiWajib
  2. 2.
    User mengklik bookmark lalu melihat label baruBelum selesaiWajib
  3. 3.
    Coding practiceBelum selesaiWajib
  4. 4.
    Cek pemahamanBelum selesaiWajib
  5. 5.
    Jangan lupa menunggu interaction asyncBelum selesaiWajib
  6. 6.
    RingkasanBelum selesaiWajib

Jangan hanya test tampilan awal ketika behavior berubah setelah action

Wajib

Banyak regression muncul setelah user berinteraksi: button tidak lagi merespons, form tidak menampilkan hasil, atau toggle tidak mengubah label. user-event mensimulasikan interaction lebih dekat dengan cara user memakai browser dibanding memanggil handler internal secara langsung. Setelah action, test memeriksa perubahan output yang terlihat. Buat instance dengan userEvent.setup(), tunggu interaction async seperti click atau type, lalu query state UI baru.

Bagian ini memengaruhi progres lesson.

User mengklik bookmark lalu melihat label baru

Wajib
tsx
import "@testing-library/jest-dom/vitest";
import { render, screen } from "@testing-library/react";
import userEvent from "@testing-library/user-event";
import { useState } from "react";
import { describe, expect, it } from "vitest";

function BookmarkButton() {
  const [isBookmarked, setIsBookmarked] = useState(false);

  return (
    <button type="button" onClick={() => setIsBookmarked(true)}>
      {isBookmarked ? "Hapus bookmark" : "Simpan bookmark"}
    </button>
  );
}

describe("BookmarkButton", () => {
  it("shows the saved label after a user click", async () => {
    const user = userEvent.setup();
    render(<BookmarkButton />);

    await user.click(screen.getByRole("button", { name: "Simpan bookmark" }));

    expect(
      screen.getByRole("button", { name: "Hapus bookmark" }),
    ).toBeInTheDocument();
  });
});

Test menemukan button dengan role serta accessible name, lalu melakukan click seperti user. Assertion memeriksa label sesudah interaction. await penting karena user-event dapat menjalankan rangkaian event secara async. Component test ini tidak memanggil setter state atau handler internal langsung.

Bagian ini memengaruhi progres lesson.

Coding practice

WajibDibuka di workspace khusus

Test course bookmark user event

Uji bookmark button melalui user-event lalu periksa label yang berubah setelah click. Preview tidak menjalankan interaction test.

Tujuan awal: Fokus di tab TSX.

Practice ini dibuka di workspace khusus. Buka practice untuk memakai editor, preview, dan cek otomatis.

Tombol selesai aktif setelah semua validasi wajib lolos.

5 cek otomatis5 checklist
Belum selesaiBuka practice

Cek pemahaman

WajibJawab dulu

Cek pemahaman singkat

Setelah userEvent.click pada button bookmark, assertion yang paling tepat adalah

Progres lesson naik setelah jawaban benar.

Peringatan

Wajib

Jangan lupa menunggu interaction async

user-event dapat memicu beberapa event dan bekerja secara async. Gunakan await pada click atau type saat test membutuhkan hasil setelah interaction. Jika test gagal, baca query mana yang tidak menemukan elemen dan apakah UI memang berubah seperti contract yang kamu harapkan. Jangan menambah timeout acak sebagai respons pertama.

Bagian ini memengaruhi progres lesson.

Ringkasan

Wajib
  • user-event mensimulasikan interaction melalui jalur yang lebih dekat dengan user.
  • Test interaction mencari control, menjalankan action, lalu memeriksa UI yang berubah.
  • Gunakan await untuk interaction async.
  • Jangan memanggil handler atau setter state component dari test.
  • Berikutnya, accessible queries membuat test mencari element dengan cara yang juga menguatkan accessibility.

Bagian ini memengaruhi progres lesson.

Langkah berikutnya

Selesaikan bagian penting lesson ini

Lanjutkan blok wajib berikutnya: Jangan hanya test tampilan awal ketika behavior berubah setelah action.