Unit Test
Menguji bagian terkecil kode secara terisolasi
Apa itu Unit Test
- Menguji unit kode paling kecil secara independen
- Unit bisa berupa fungsi, method, atau kelas
- Tidak boleh bergantung pada database, API, atau modul lain
Karakteristik Unit Test yang Baik
- Cepat: harus selesai dalam hitungan milidetik
- Terisolasi: tidak bergantung pada kondisi eksternal
- Deterministik: hasil selalu sama untuk input yang sama
- Fokus: menguji satu perilaku pada satu waktu
Struktur Test: Arrange-Act-Assert
Arrange
- Menyiapkan data dan kondisi awal
- Menginisialisasi objek dan mock yang dibutuhkan
Act
- Menjalankan fungsi atau method yang diuji
- Biasanya satu baris kode
Assert
- Memverifikasi hasil sesuai harapan
- Memastikan output, state, atau exception yang terjadi benar
Contoh Unit Test Sederhana
// Fungsi yang akan diuji
function tambah(a, b) {
return a + b;
}
// Test
it('harus mengembalikan jumlah dari dua angka', () => {
// Arrange
const a = 2;
const b = 3;
// Act
const hasil = tambah(a, b);
// Assert
expect(hasil).toBe(5);
});Assertion Umum
toBe(value)— perbandingan strict equalitytoEqual(object)— perbandingan deep equality untuk objektoBeNull()— memastikan nilai nulltoBeUndefined()— memastikan nilai undefinedtoBeTruthy()/toBeFalsy()— memeriksa truthinesstoThrow()— memastikan fungsi melempar errortoContain(item)— memeriksa array atau string mengandung item
Code Coverage
- Persentase kode yang dijalankan oleh test
- Metrics: function coverage, line coverage, branch coverage
- Target umum minimal 70-80% untuk aplikasi produksi
- Coverage tinggi tidak menjamin tidak ada bug
Praktik Terbaik
- Nama test deskriptif, menjelaskan skenario dan harapan
- Satu assert per test untuk fokus yang jelas
- Hindari logic branching dalam test
- Pisahkan test untuk happy path dan edge case
- Jangan test implementation details, test behavior publik