ReactJS #28: Testing Sederhana
Dengan React Testing Library
(Opsional, untuk yang Ingin Lebih Profesional)
Halo, penguji kode! 🧪
Setelah aplikasi React-mu jadi, kamu pasti ingin memastikan semuanya berfungsi dengan benar. Apalagi jika aplikasi sudah besar, sulit mengecek satu per satu secara manual. Di sinilah testing (pengujian) berperan. Ibarat guru yang memeriksa PR murid, kita bisa menulis kode yang secara otomatis memeriksa apakah komponen kita bekerja sesuai harapan.
🧐 Apa Itu React Testing Library?
React Testing Library adalah seperangkat alat untuk menguji komponen React. Ia mendorong kita untuk menguji komponen dari sudut pandang pengguna, bukan dari detail implementasi. Jadi kita akan mencari elemen di layar (seperti tombol, teks) dan mensimulasikan interaksi (klik, ketik), lalu memeriksa hasilnya.
React Testing Library sudah termasuk saat kita membuat proyek dengan Create React App. Kita juga punya Jest sebagai test runner (yang menjalankan tes dan memberi laporan).
📁 Lokasi File Tes
Biasanya file tes diletakkan di dekat komponen yang diuji, dengan nama Component.test.js atau Component.spec.js. Contoh: untuk komponen Button.js, buat Button.test.js di folder yang sama.
Atau bisa juga di folder __tests__. Create React App akan otomatis menemukan file-file ini saat kita menjalankan npm test.
🔧 Menjalankan Tes
Untuk menjalankan tes, gunakan perintah:
Perintah ini akan menjalankan Jest dalam mode watch (memantau perubahan). Setiap kali kamu mengubah kode atau tes, tes akan dijalankan ulang. Tekan q untuk keluar, a untuk jalankan semua tes.
🧪 Contoh 1: Menguji Komponen Sederhana
Buat komponen Counter.js:
Buat file tes Counter.test.js di folder yang sama:
Penjelasan:
render– merender komponen ke dalam lingkungan tes (virtual DOM).screen.getByText– mencari elemen berdasarkan teks (bisa pakai regex).screen.getByRole– mencari elemen berdasarkan peran aksesibilitas (bagus untuk tombol).fireEvent.click– mensimulasikan klik pada tombol.expect(...).toBeInTheDocument()– memastikan elemen ada di DOM (matchers dari jest-dom).
Jalankan npm test, dan lihat hasilnya! 🌟
🖱️ Menguji Interaksi Pengguna dengan user-event
fireEvent cepat, tapi kurang realistis. Ada library @testing-library/user-event yang lebih mirip interaksi pengguna sungguhan (misal mengetik, memilih).
Instal (sudah include di CRA sebenarnya):
Contoh untuk form input:
Perhatikan await user.type(...) karena interaksi user-event bersifat asinkron.
📡 Menguji Komponen yang Mengambil Data (Mock API)
Komponen sering mengambil data dari API. Saat tes, kita tidak ingin benar-benar memanggil API (lambat, tidak bisa diandalkan). Kita bisa mock (meniru) fungsi fetch.
Contoh komponen UserList.js yang fetch daftar pengguna:
Buat tes dengan mock fetch:
Kita menggunakan waitFor untuk menunggu hingga elemun muncul (karena asinkron).
afterEach atau menggunakan jest.clearAllMocks().
🧩 Apa yang Perlu Diuji?
- Rendering dasar: Apakah komponen muncul dengan benar (teks, tombol)?
- Interaksi pengguna: Apakah klik, ketik, submit berfungsi?
- Kasus tepi (edge cases): Apa yang terjadi jika data kosong? Jika error?
- Kondisi loading dan error: Apakah tampilan loading muncul, lalu hilang setelah data datang?
🧪 Latihan: Menguji Komponen Todo
Ambil komponen TodoList dari artikel #15 (atau buat sederhana). Tulis tes untuk:
- Menampilkan daftar tugas awal.
- Menambahkan tugas baru (simulasi ketik dan klik tombol).
- Menandai tugas selesai (klik checkbox) dan memastikan coretan muncul.
- Menghapus tugas.
Gunakan userEvent untuk simulasi ketik dan klik.
await jika ada perubahan state asinkron (misal setelah klik, state update butuh waktu).
🚀 Kesimpulan
- React Testing Library membantu kita menguji komponen dari perspektif pengguna.
- Gunakan
render,screen,fireEventatauuserEventuntuk interaksi. - Mock fetch untuk menguji komponen yang bergantung pada API.
- Testing membuat aplikasi lebih andal dan memudahkan pengembangan fitur baru tanpa merusak yang lama.
Meskipun opsional, belajar testing akan membawamu ke level profesional. Selamat mencoba!
Di artikel selanjutnya kita akan membuat Aplikasi Blog Sederhana dengan API WordPress sebagai proyek akhir. Sampai jumpa!