User Events
Menguji click dan interaction sederhana lewat user-event lalu memeriksa perubahan yang user lihat.
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
Isi lesson
6 blok- 1.Jangan hanya test tampilan awal ketika behavior berubah setelah actionBelum selesaiWajib
- 2.User mengklik bookmark lalu melihat label baruBelum selesaiWajib
- 3.Coding practiceBelum selesaiWajib
- 4.Cek pemahamanBelum selesaiWajib
- 5.Jangan lupa menunggu interaction asyncBelum selesaiWajib
- 6.RingkasanBelum selesaiWajib
Jangan hanya test tampilan awal ketika behavior berubah setelah action
WajibBanyak 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
Wajibimport "@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 khususTest 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.
Cek pemahaman
WajibJawab duluCek pemahaman singkat
Setelah userEvent.click pada button bookmark, assertion yang paling tepat adalah
Progres lesson naik setelah jawaban benar.
Peringatan
WajibJangan 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.