Definisi dan Tujuan Unit Testing
Unit testing adalah proses pengujian bagian terkecil dari kode (unit), biasanya berupa fungsi atau modul, secara terisolasi untuk memastikan setiap bagian bekerja sesuai spesifikasi. Dalam ekosistem JavaScript, unit testing krusial untuk mencegah regresi saat melakukan refactoring atau penambahan fitur baru.
Framework Populer JavaScript
Pemilihan framework bergantung pada lingkungan runtime (Node.js atau Browser) dan kebutuhan performa. Berikut adalah perbandingan framework utama yang digunakan di industri saat ini:
| Framework | Kelebihan | Kekurangan | Ideal Untuk |
|---|---|---|---|
| Jest | All-in-one, mocking kuat | Performa lambat di proyek besar | React, Node.js |
| Vitest | Sangat cepat (Vite-based) | Ekosistem lebih baru | Vite, Vue, Modern JS |
| Mocha | Fleksibel, modular | Butuh library tambahan | Node.js backend |
Implementasi Dasar dengan Jest
Untuk memulai unit testing, instalasi dependensi adalah langkah pertama. Berikut adalah contoh implementasi pengujian fungsi matematika sederhana.
Langkah 1: Instalasi
npm install --save-dev jestLangkah 2: Membuat Fungsi (math.js)
function sum(a, b) { return a + b; } module.exports = sum;Langkah 3: Membuat Test (math.test.js)
const sum = require('./math'); test('menjumlahkan 1 + 2 sama dengan 3', () => { expect(sum(1, 2)).toBe(3); });Strategi Pengujian Efektif
Agar unit testing memberikan nilai tambah nyata, terapkan prinsip berikut:
- Isolasi: Gunakan mocking untuk menggantikan dependensi eksternal seperti API atau database.
- Determinisme: Tes harus memberikan hasil yang sama setiap kali dijalankan.
- Cakupan (Coverage): Targetkan 80% kode tercakup, namun jangan terjebak mengejar 100% jika tidak krusial.
- Penamaan: Gunakan format deskriptif seperti
test('should return error when input is null', ...).
Troubleshooting Umum
Masalah yang sering muncul adalah asynchronous testing. Pastikan Anda menggunakan async/await dalam pengujian fungsi yang mengembalikan Promise agar test tidak selesai sebelum proses selesai.
test('fetch data sukses', async () => { const data = await fetchData(); expect(data).toBe('success'); });