Site icon JocoDEV

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:

Kenapa Mocking Penting?

  1. Kontrol penuh: Kita bisa membuat skenario sukses/gagal tanpa bergantung pada faktor eksternal.
  2. Testing lebih cepat: Tidak perlu menunggu API/database nyata merespons.
  3. Hindari efek samping: Misalnya, testing fungsi hapus data tidak benar-benar menghapus data di database.

Kapan Mocking Dibutuhkan?



Baca Juga: Menerapkan DDD dalam Node JS untuk Pemula

Mengenal Jest untuk Mocking

Jest adalah framework testing JavaScript yang populer. Keunggulannya:

Fitur Mocking di Jest

  1. 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"
  1. 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
  1. 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:

  1. Jalankan perintah:
   jest --coverage
  1. Hasilnya berupa tabel yang menunjukkan:

Tips Meningkatkan Coverage:


Kesalahan Umum Pemula

  1. Terlalu banyak mock: Fokus pada komponen yang benar-benar bergantung pada eksternal.
  2. Tidak memverifikasi mock: Pastikan mock dipanggil dengan argumen yang benar.
  3. 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! 🚀

Exit mobile version