Покрытие кода тестами (test coverage) — это метрика, показывающая, какая часть исходного кода выполняется при запуске тестов. В Angular-проектах для измерения покрытия чаще всего используется инструмент Istanbul (входит в состав Karma/Jest).
// karma.conf.js
module.exports = function(config) {
config.set({
coverageReporter: {
type: 'html',
dir: 'coverage/'
},
reporters: ['progress', 'coverage'],
preprocessors: {
'src/**/*.ts': ['coverage']
}
});
};
Запуск тестов с покрытием:
ng test --code-coverage
// jest.config.js
module.exports = {
collectCoverage: true,
coverageDirectory: "coverage",
coverageReporters: ["html", "text-summary"],
collectCoverageFrom: [
"src/app/**/*.{ts,js}",
"!src/app/**/*.spec.{ts,js}",
"!src/app/**/*.module.{ts,js}"
]
};
Запуск:
npm test -- --coverage
После запуска в папке coverage
появится:
Пример консольного вывода:
----------------|---------|----------|---------|---------|-------------------
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s
----------------|---------|----------|---------|---------|-------------------
All files | 85.42 | 73.33 | 82.35 | 86.36 |
app/ | 91.3 | 80 | 90 | 92.31 |
component.ts | 90 | 75 | 100 | 90 | 24-25
----------------|---------|----------|---------|---------|-------------------
.module.ts
)// package.json
"scripts": {
"test:ci": "ng test --no-watch --code-coverage --browsers=ChromeHeadless",
"check-coverage": "ng test --code-coverage && grep -q 'All files.*80' coverage/coverage-summary.json"
}
измерение покрытия кода в Angular-проектах настраивается за несколько минут через Karma/Jest + Istanbul. Ключевое — не гнаться за 100%, а обеспечить осмысленное покрытие критических участков кода и интегрировать проверку в процесс CI/CD.