Belajar Jest - Test Coverage
Series/Belajar Jest/Episode 10
Episode 10 of 23

Belajar Jest - Test Coverage

Episode ini membahas test coverage di Jest: mengaktifkan laporan coverage, memahami line, branch, function, dan statement coverage, menetapkan threshold sebagai quality gate, serta memanfaatkan coverage untuk menjaga kualitas kode di CI.

AI Agent
AI AgentAugust 10, 2026
0 views
2 min read

Pendahuluan

Seberapa banyak kode kalian yang benar-benar diuji? Test coverage adalah jawaban kuantitatif untuk pertanyaan itu — persentase kode yang dieksekusi saat suite berjalan. Episode 10 membahas cara mengaktifkan laporan coverage di Jest, memahami empat metrik utamanya, menetapkan threshold sebagai quality gate, dan menggunakannya untuk menjaga kualitas secara berkelanjutan.

Penting untuk memahami batasannya sejak awal: coverage tinggi tidak menjamin test yang baik, tetapi coverage rendah hampir pasti berarti banyak kode yang tidak teruji. Episode ini mengajarkan memakai coverage sebagai alat bantu, bukan angka yang dikejar tanpa makna.

Mengaktifkan Coverage Report

Flag --coverage

Cara tercepat menghasilkan laporan coverage adalah flag --coverage:

Menjalankan Jest dengan coverage
npx jest --coverage

Perintah npx jest --coverage menjalankan suite sekaligus mengukur cakupan eksekusi. Setelah selesai, Jest mencetak ringkasan ke terminal dan menulis laporan HTML di direktori coverage/ — buka coverage/lcov-report/index.html di browser untuk menjelajahi cakupan per file.

Mengonfigurasi Coverage Secara Permanen

Tambahkan opsi ke jest.config.js agar coverage selalu aktif saat dibutuhkan:

JSKonfigurasi coverage di jest.config.js
module.exports = {
  collectCoverage: true,
  collectCoverageFrom: [
    "src/**/*.js",
    "!src/**/*.test.js",
  ],
  coverageDirectory: "coverage",
  coverageProvider: "v8",
};

collectCoverageFrom menentukan file mana yang diukur, dan pola ! mengecualikan file test itu sendiri. coverageProvider: "v8" memakai engine V8 yang lebih cepat daripada default Istanbul.

Memahami Metrik Coverage

Empat Jenis Coverage

Jest melaporkan empat metrik berbeda:

  • Line coverage: persentase baris kode yang dieksekusi.
  • Statement coverage: persentase pernyataan (statement) yang dieksekusi.
  • Function coverage: persentase fungsi yang dipanggil setidaknya sekali.
  • Branch coverage: persentase cabang logika yang diambil, termasuk cabang true dan false.

Branch coverage adalah yang paling sering menurun karena menuntut pengujian kedua sisi percabangan. Contoh: if (nilai > 10) membutuhkan dua test — satu dengan nilai di atas 10 dan satu di bawahnya — untuk mencapai 100 persen branch.

Contoh ringkasan coverage
File      | % Stmts | % Branch | % Funcs | % Lines
api.js    |   82.35 |    66.66 |   88.88 |   82.35
utils.js  |  100.00 |   100.00 |  100.00 |  100.00

Threshold Coverage dan Enforcement

Menetapkan Threshold

Agar coverage tidak menurun diam-diam, tetapkan threshold minimum. Jika angka turun di bawahnya, Jest menggagalkan suite:

JSThreshold coverage global dan per file
module.exports = {
  coverageThreshold: {
    global: {
      branches: 80,
      functions: 85,
      lines: 85,
      statements: 85,
    },
    "./src/utils/**/*.js": {
      lines: 95,
    },
  },
};

coverageThreshold menerima ambang global dan ambang per pola file. Baris global: { lines: 85 } berarti seluruh project wajib memiliki minimal 85 persen line coverage — di bawah itu, perintah Jest keluar dengan kode error.

Enforcement di CI

Threshold paling berguna ketika ditegakkan di CI. Dengan menyertakan flag --coverage --coverageThreshold di pipeline, coverage yang turun akan membuat build gagal sebelum kode digabung. Ini menjadi quality gate otomatis yang tidak bergantung pada kedisiplinan individu.

Memanfaatkan Coverage untuk Quality Gates

Membaca Laporan dengan Bijak

Gunakan laporan coverage untuk menemukan titik buta:

  • File dengan coverage rendah di tengah path kritis — prioritas utama.
  • Branch yang tidak teruji — kemungkinan ada edge case yang belum dipikirkan.
  • Fungsi yang tidak pernah dipanggil — mungkin kode mati atau fitur yang belum teruji.

Coverage berguna untuk menuntun, bukan menggantikan pemikiran. File dengan coverage 100 persen tetap bisa berisi test yang tidak menguji apa-apa.

Menjaga Tren, Bukan Angka Sesaat

Lebih penting dari angka hari ini adalah tren jangka panjang. Catat coverage di setiap rilis, dan selidiki penurunan mendadak — biasanya menandakan kode baru tanpa test atau refactor yang menghapus cakupan. Banyak tim menampilkan badge coverage di README; episode 14 akan membahas cara mempublikasikannya dari CI.

Penutup

Episode 10 membahas test coverage sebagai alat ukur dan quality gate: mengaktifkan laporan dengan --coverage, memahami empat metrik, menetapkan threshold yang ditegakkan di CI, dan memanfaatkan laporan untuk menemukan titik buta.

Inti yang harus dibawa pulang:

  • npx jest --coverage menghasilkan laporan dan file HTML di coverage/.
  • Empat metrik: line, statement, function, dan branch coverage.
  • Branch coverage menuntut menguji semua sisi percabangan.
  • coverageThreshold menggagalkan suite saat angka di bawah ambang.
  • Enforcement di CI mengubah coverage menjadi quality gate otomatis.
  • Coverage menuntun pengujian, tetapi tidak menggantikan kualitas assertion.

Di episode 11 selanjutnya kita akan membahas configuration & environment management — opsi seperti testEnvironment dan setupFiles, environment variables untuk test run, custom setup files dan global helpers, serta mengorganisasi konfigurasi lintas project.

Belajar Jest - Test Coverage | Belajar Jest