Code coverage đo phần trăm code được thực thi bởi tests — sinh bởi Istanbul (Jest) hoặc V8 (Vitest V8 provider).
Các metric:
- Statement coverage — % statement được chạy.
- Branch coverage — % nhánh được cover: mỗi if/else/ternary/&&/|| tạo 2 nhánh, phải test cả true lẫn false. Metric quan trọng nhất — 100% statement nhưng 70% branch nghĩa là nhiều edge case chưa test.
- Function coverage — % function được gọi ít nhất một lần.
- Line coverage — % dòng được chạy; thường cao nhất, ít ý nghĩa nhất.
Diễn giải:
- 100% coverage không bảo đảm hết bug — test có thể chạy code nhưng assert sai.
- Coverage thấp (<60–70%) là tín hiệu cảnh báo.
- Mục tiêu thực tế: 80–90% cho business logic, 70%+ tổng thể; không cần 100% cho UI component và file config.
Cấu hình: coverageThreshold trong jest.config.js fail CI khi dưới ngưỡng; coveragePathIgnorePatterns loại vendor code, generated files, test utilities. Report: text (CI), html (xem trực quan), lcov (SonarQube, Codecov). Mutation testing (Stryker) sửa code rồi kiểm tra test có fail không — đo chất lượng test, không chỉ số lượng coverage.