Code coverage đo phần trăm code được chạy bởi tests — generated bởi Istanbul (Jest), V8 (Vitest V8 provider).
- Metrics: Statement coverage (% statements executed — mỗi expression/assignment là statement); Branch coverage (% branches covered — mỗi if/else/ternary/&&/|| tạo 2 branches, phải test cả true và false case); Function coverage (% functions called ít nhất một lần); Line coverage (% lines executed — thường cao nhất, ít meaningful nhất).
- Branch coverage là metric quan trọng nhất — 100% statement nhưng 70% branch nghĩa là nhiều edge cases chưa được test. 100% coverage không đảm bảo bug-free: test có thể chạy code nhưng không assert correctly; test với wrong inputs không catch bugs với right inputs.
- Low coverage là red flag: dưới 60-70% thường là warning sign.
- Coverage thresholds trong jest.config.js: coverageThreshold: { global: { branches: 80, functions: 80 } } — fail CI nếu không đạt.
- Practical targets: 80-90% cho business logic; 70%+ overall; không chase 100% cho UI components và configuration files.
- Excluded from coverage: vendor code, generated files, test utilities — dùng coveragePathIgnorePatterns.
- Coverage reports: text (CI), html (visual inspection), lcov (SonarQube, Codecov).
- Mutation testing (Stryker): modify code và check nếu tests fail — đo test quality, không chỉ coverage quantity.