Lewati ke konten utama

Setup Test Coverage di Windows (Xdebug + Pest)

Dokumentasi ini menjelaskan cara mengaktifkan code coverage di Windows untuk project Laravel + Pest menggunakan Xdebug.

Untuk developer pemula, code coverage adalah laporan yang menunjukkan bagian kode mana yang benar-benar tersentuh oleh test. Ini bukan ukuran mutlak kualitas test, tetapi sangat membantu untuk melihat area yang belum diuji sama sekali.

Kenapa Saya Tetap Menulis Ini

Banyak developer Windows kesulitan di langkah ini karena:

  • versi PHP berbeda-beda
  • lokasi php.ini kadang membingungkan
  • file .dll Xdebug harus sesuai detail build PHP
  • kadang Herd, Laragon, atau PHP manual saling bertabrakan

Supaya onboarding lebih mudah, saya sengaja dokumentasikan langkahnya secara eksplisit.

1. Download Xdebug

  1. Buka Xdebug Wizard.
  2. Jalankan perintah berikut lalu salin hasilnya ke wizard:
php -i
  1. Download file .dll yang sesuai dengan konfigurasi PHP Anda. Anda juga bisa download manual dari halaman rilis Xdebug.

Contoh untuk PHP 8.4 NTS VC17 x64:

php_xdebug-3.4.5-8.4-nts-vs17-x86_64.dll

2. Letakkan File DLL

Simpan file .dll ke folder ext sesuai versi PHP yang sedang Anda pakai.

Jika Anda menggunakan Herd, contohnya bisa seperti ini:

C:\Users\<username>\.config\herd\bin\php84\ext\

Untuk mempermudah konfigurasi, rename file tersebut menjadi:

php_xdebug.dll

3. Konfigurasi php.ini

Cari tahu lokasi php.ini aktif:

php --ini

Kemudian tambahkan atau pastikan baris berikut ada:

zend_extension=opcache
zend_extension=php_xdebug
xdebug.mode=coverage

Catatan:

  • opcache biasanya memang sudah ada
  • php_xdebug diletakkan setelah opcache
  • karena file ada di folder ext, Anda tidak perlu menuliskan path lengkap selama PHP membaca folder ext yang benar

4. Verifikasi Instalasi

Jalankan:

php -v

Jika berhasil, output akan menampilkan informasi Xdebug tanpa warning.

Contoh:

PHP 8.4.x (cli) ...
with Xdebug v3.4.5, Copyright (c) 2002-2025, by Derick Rethans

5. Jalankan Test Coverage

Gunakan perintah berikut untuk menjalankan test dengan coverage:

vendor/bin/pest --coverage

Jika berhasil, laporan coverage akan muncul tanpa error No code coverage driver is available.

Studi Kasus

Misalnya Anda baru menulis CreateUserAction beserta test-nya. Test mungkin sudah lewat, tetapi Anda ingin tahu:

  • apakah branch gagal validasi ikut diuji
  • apakah proses role assignment sudah tersentuh
  • apakah logika notifikasi ikut diuji

Coverage membantu memberi gambaran awal. Kalau Anda melihat file action hanya tercakup 20%, berarti mungkin test yang Anda tulis baru menyentuh happy path saja.

Error yang Sering Terjadi

No code coverage driver is available

Biasanya berarti:

  • Xdebug belum terpasang
  • xdebug.mode=coverage belum aktif
  • PHP CLI yang Anda jalankan bukan PHP yang konfigurasi php.ini-nya tadi diubah

Xdebug sudah terpasang, tapi coverage tetap gagal

Sering terjadi jika:

  • ada lebih dari satu instalasi PHP
  • terminal memakai PHP berbeda dari Herd
  • Anda mengedit php.ini yang salah

Untuk memastikan, cek:

where php
php --ini
php -v

Kesimpulan

Kalau test suite adalah sabuk pengaman, maka coverage adalah dashboard tambahan yang membantu Anda melihat area mana yang belum tersentuh. Bukan tujuan akhir, tetapi sangat berguna saat Anda mulai membangun kebiasaan testing yang lebih serius.