
Panduan Mocking dan Coverage Code dengan Jest
Mocking dengan Jest adalah teknik untuk membuat “tiruan” dari komponen eksternal (seperti API atau database) saat menguji kode JavaScript. Bayangkan Anda ingin menguji fungsi yang bergantung pada API: jika API-nya lambat atau tidak stabil, testing jadi sulit. Di sinilah mocking berperan! Dengan Jest, Anda bisa membuat “API palsu” yang responsnya bisa dikendalikan, sehingga pengujian lebih cepat dan andal.
Selain mocking, coverage code (cakupan kode) juga penting untuk memastikan tidak ada bagian kode yang terlewat dari pengujian. Semakin tinggi persentase coverage, semakin kecil risiko bug tersembunyi.
Baca Juga: Implementasi Unit Test di Node JS dengan Mudah
Apa Itu Mocking? Mengapa Penting?
Mocking adalah teknik “pura-pura” dalam testing. Bayangkan Anda sedang menguji fungsi yang memanggil API. Jika API-nya lambat atau tidak stabil, testing jadi sulit. Mocking menggantikan API asli dengan versi palsu yang bisa kita kendalikan.
Contoh Analogi:
- Saat latihan drama, aktor menggunakan “pemain pengganti” untuk simulasi. Mocking mirip seperti itu: kita buat “pengganti” untuk API/database agar testing lebih cepat dan aman.
Kenapa Mocking Penting?
- Kontrol penuh: Kita bisa membuat skenario sukses/gagal tanpa bergantung pada faktor eksternal.
- Testing lebih cepat: Tidak perlu menunggu API/database nyata merespons.
- Hindari efek samping: Misalnya, testing fungsi hapus data tidak benar-benar menghapus data di database.
Kapan Mocking Dibutuhkan?
- Saat menguji kode yang bergantung pada: API, database, atau layanan eksternal.
- Ketika komponen belum siap (misal: backend masih dalam pengembangan).
Baca Juga: Menerapkan DDD dalam Node JS untuk Pemula
Mengenal Jest untuk Mocking
Jest adalah framework testing JavaScript yang populer. Keunggulannya:
- Mudah digunakan: Hanya perlu sedikit konfigurasi.
- Fitur mocking lengkap: Ada fungsi khusus untuk membuat “palsuan” (mock).
Fitur Mocking di Jest
- Mock Function (
jest.fn()
):
Membuat fungsi palsu yang bisa dilacak.
const mockFunc = jest.fn();
mockFunc("hello");
expect(mockFunc).toHaveBeenCalledWith("hello"); // Cek apakah dipanggil dengan argumen "hello"
- Mock Module (
jest.mock()
):
Mengganti seluruh modul (misal: Axios) dengan versi palsu.
jest.mock("axios"); // Ganti modul axios dengan mock
axios.get.mockResolvedValue({ data: "Success!" }); // Atur respons palsu
- Spy (
jest.spyOn()
):
Memantau fungsi asli tanpa mengubah perilakunya.
const obj = { greet: () => "Hello" };
const spy = jest.spyOn(obj, "greet");
obj.greet();
expect(spy).toHaveBeenCalled(); // Cek apakah fungsi greet dipanggil
Contoh Praktis: Mocking API dengan Axios
Langkah 1: Buat fungsi yang memanggil API.
// getUser.js
import axios from "axios";
export async function getUser(id) {
const response = await axios.get(`https://api.example.com/users/${id}`);
return response.data;
}
Langkah 2: Buat file test dengan mocking.
// getUser.test.js
jest.mock("axios"); // Mock modul axios
test("getUser mengembalikan data user palsu", async () => {
const mockUser = { id: 1, name: "Budi" };
axios.get.mockResolvedValue({ data: mockUser }); // Atur respons palsu
const user = await getUser(1);
expect(axios.get).toHaveBeenCalledWith("https://api.example.com/users/1"); // Pastikan URL benar
expect(user).toEqual(mockUser); // Pastikan data sesuai
});
Mengukur Coverage Code
Coverage code adalah persentase kode yang diuji oleh tes. Semakin tinggi coverage, semakin kecil risiko bug.
Cara Menggunakan Coverage di Jest:
- Jalankan perintah:
jest --coverage
- Hasilnya berupa tabel yang menunjukkan:
- % Lines: Berapa persen baris kode yang diuji.
- Uncovered Lines: Baris yang belum diuji (perlu ditambahkan tes).
Tips Meningkatkan Coverage:
- Tambahkan tes untuk skenario error (misal: API gagal).
- Gunakan kombinasi
unit test
(uji fungsi kecil) danintegration test
(uji alur lengkap).
Kesalahan Umum Pemula
- Terlalu banyak mock: Fokus pada komponen yang benar-benar bergantung pada eksternal.
- Tidak memverifikasi mock: Pastikan mock dipanggil dengan argumen yang benar.
- Mengabaikan coverage report: Gunakan laporan untuk menemukan area yang belum diuji.
Referensi Tambahan
Dengan memahami mocking dan coverage, Anda bisa menulis tes yang lebih efisien dan menjaga kualitas kode! 🚀
Tag:Cakupan Kode, Coverage Code Jest, Coverage Report, Coverage Testing, Dependensi Eksternal, Efek Samping Dependensi, Fitur Bawaan Jest, Framework Pengujian JavaScript, Fungsi Tiruan, Integration Test, Isolasi Unit Kode, Kecepatan Pengujian, Kualitas Perangkat Lunak, Manual Mocking, Mock Function, Mock Functions, Mocking dengan Jest, Module Mocking, Panggilan API Eksternal, Pengujian Perangkat Lunak, Pengujian Unit, Snapshot Testing, Spy Function, Spy Mocking, Timer Mocking