Test Coverage & Strategi — Testing

Apa itu Test Coverage? Test coverage (code coverage) mengukur persentase kode yang dieksekusi saat menjalankan test suite. Ini memberikan gambaran seberapa bany

Apa itu Test Coverage?

Test coverage (code coverage) mengukur persentase kode yang dieksekusi saat menjalankan test suite. Ini memberikan gambaran seberapa banyak kode yang sudah diuji — tapi bukan seberapa baik kode diuji.

Jenis Metrik Coverage

Coverage di Vitest

Vitest mendukung dua provider coverage: V8 (cepat, default) dan Istanbul (lebih detail):

# Install provider
npm install -D @vitest/coverage-v8
# atau
npm install -D @vitest/coverage-istanbul

# Jalankan dengan coverage
npx vitest --coverage

Konfigurasi Coverage

// vitest.config.ts
import { defineConfig } from "vitest/config";

export default defineConfig({
  test: {
    coverage: {
      provider: "v8",
      reporter: ["text", "html", "lcov"],
      include: ["src/**/*.{ts,tsx}"],
      exclude: ["src/**/*.test.ts", "src/**/*.d.ts"],
      thresholds: {
        lines: 80,
        branches: 75,
        functions: 80,
        statements: 80,
      },
    },
  },
});

Dengan thresholds, CI akan gagal jika coverage turun di bawah batas yang ditentukan.

Membaca Laporan Coverage

---------------------|---------|----------|---------|---------|
File                 | % Stmts | % Branch | % Funcs | % Lines |
---------------------|---------|----------|---------|---------|
All files            |   85.71 |    78.57 |   90.00 |   85.71 |
 src/utils/math.ts   |  100.00 |   100.00 |  100.00 |  100.00 |
 src/utils/format.ts |   66.67 |    50.00 |   75.00 |   66.67 |
---------------------|---------|----------|---------|---------|

Buka coverage/index.html untuk laporan visual — baris yang belum diuji ditandai merah.

Apa yang 100% Coverage TIDAK Jamin

Contoh: 100% Coverage Tapi Tetap Bug

function bagi(a, b) {
  return a / b;
}

// Test ini memberikan 100% coverage
test("bagi 10 / 2", () => {
  expect(bagi(10, 2)).toBe(5); // PASS
});

// Tapi TIDAK menguji pembagian dengan 0!
// bagi(10, 0) → Infinity (bug!)

Strategi Coverage yang Bermakna

Yang akan kamu pelajari