Recraftory

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 equality
  • toEqual(object) — perbandingan deep equality untuk objek
  • toBeNull() — memastikan nilai null
  • toBeUndefined() — memastikan nilai undefined
  • toBeTruthy() / toBeFalsy() — memeriksa truthiness
  • toThrow() — memastikan fungsi melempar error
  • toContain(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