Coverage threshold làm CI fail khi độ phủ tụt dưới mức tối thiểu, khai báo trong jest.config.js:
js
coverageThreshold: {
global: { branches: 80, functions: 80, lines: 85, statements: 85 },
// business logic quan trọng thì đòi cao hơn
'./src/services/payment.ts': { branches: 95, lines: 95 },
},
coveragePathIgnorePatterns: ['/node_modules/', '/dist/', '.stories.'],
collectCoverageFrom: ['src/**/*.{ts,tsx}', '!src/**/*.d.ts'],collectCoverageFromrất quan trọng: không có nó thì file hoàn toàn chưa có test sẽ không bị tính vào coverage (Jest chỉ đếm file được test import), và con số đẹp một cách giả tạo.- Branch coverage là chỉ số đáng tin nhất — 80% branch nghĩa là phần lớn nhánh
if/elseđã được đi qua. Statement và line coverage rất dễ thổi phồng. - Collector: Istanbul là mặc định của Jest, còn
coverageProvider: 'v8'dùng bộ đếm native, nhanh hơn.
Lưu ý: đặt ngưỡng quá cao ngay từ đầu chỉ cản trở team — bắt đầu 60-70% rồi nâng dần. Cũng đừng chạy theo 100% cho cả codebase: component UI thuần layout có coverage thấp không đồng nghĩa với rủi ro.