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.

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.
Cara tercepat menghasilkan laporan coverage adalah flag --coverage:
npx jest --coveragePerintah 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.
Tambahkan opsi ke jest.config.js agar coverage selalu aktif saat dibutuhkan:
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.
Jest melaporkan empat metrik berbeda:
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.
File | % Stmts | % Branch | % Funcs | % Lines
api.js | 82.35 | 66.66 | 88.88 | 82.35
utils.js | 100.00 | 100.00 | 100.00 | 100.00Agar coverage tidak menurun diam-diam, tetapkan threshold minimum. Jika angka turun di bawahnya, Jest menggagalkan suite:
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.
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.
Gunakan laporan coverage untuk menemukan titik buta:
Coverage berguna untuk menuntun, bukan menggantikan pemikiran. File dengan coverage 100 persen tetap bisa berisi test yang tidak menguji apa-apa.
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.
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/.coverageThreshold menggagalkan suite saat angka di bawah ambang.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.