Karma — это тестовый раннер для JavaScript и TypeScript, который позволяет запускать тесты в реальных браузерах и получать подробные отчёты о покрытии кода. Использование Karma в связке с TypeScript требует настройки транспиляции, интеграции с тестовым фреймворком (обычно Jasmine, Mocha или QUnit) и подключением инструментов для анализа покрытия, таких как Istanbul через karma-coverage.
Для корректной работы с TypeScript требуется подготовить несколько ключевых компонентов:
sourceMap: true, чтобы отчёты о покрытии отображали
оригинальный TypeScript-код, а не транспилированный JavaScript. Пример
минимального tsconfig для тестов:{
"compilerOptions": {
"target": "ES6",
"module": "commonjs",
"sourceMap": true,
"strict": true,
"esModuleInterop": true,
"outDir": "dist"
},
"include": ["src/**/*.ts", "test/**/*.ts"]
}
npm install --save-dev karma karma-jasmine jasmine-core karma-chrome-launcher karma-coverage ts-loader typescript
karma — основной раннер тестов.karma-jasmine и jasmine-core — фреймворк
тестирования.karma-chrome-launcher — запуск тестов в браузере
Chrome.karma-coverage — сбор покрытия кода.ts-loader — транспиляция TypeScript для Karma.Файл karma.conf.js содержит настройки тестового
окружения. Ключевые элементы для работы с TypeScript и покрытием
кода:
module.exports = function(config) {
config.set({
frameworks: ['jasmine'],
files: [
'src/**/*.ts',
'test/**/*.ts'
],
preprocessors: {
'src/**/*.ts': ['webpack', 'sourcemap'],
'test/**/*.ts': ['webpack', 'sourcemap']
},
webpack: {
mode: 'development',
devtool: 'inline-source-map',
module: {
rules: [
{
test: /\.ts$/,
use: [
{
loader: 'ts-loader',
options: { transpileOnly: true }
}
],
exclude: /node_modules/
}
]
},
resolve: {
extensions: ['.ts', '.js']
}
},
reporters: ['progress', 'coverage'],
coverageReporter: {
type: 'html',
dir: 'coverage/',
includeAllSources: true
},
browsers: ['ChromeHeadless'],
singleRun: true
});
};
Основные моменты конфигурации:
includeAllSources: true гарантирует, что
файлы без тестов тоже попадут в отчёт.После запуска karma start создаётся директория
coverage/, в которой находятся:
Покрытие кода измеряется по следующим критериям:
Визуальный отчёт позволяет легко определить, какие части TypeScript-кода не тестируются, и добавлять недостающие тесты для повышения качества проекта.
Разделение тестов на модульные Тесты должны проверять отдельные функции или классы. Это упрощает анализ покрытия и позволяет точно видеть, какие ветви кода не используются.
Использование sourceMap Без
sourceMap отчёты покрытия будут ссылаться на скомпилированный
JavaScript, что делает отладку сложной.
Интеграция с CI/CD Karma и
karma-coverage можно подключить к Jenkins, GitHub Actions
или GitLab CI для автоматической проверки покрытия при каждом
коммите.
Игнорирование стороннего кода В конфигурации
можно исключать node_modules или генерируемые файлы, чтобы
отчёт отражал только собственный TypeScript-код.
Для больших проектов важно правильно структурировать тесты:
src/ — основной код на TypeScript.test/ — отдельные файлы тестов с зеркальной структурой
модулей src/.tsconfig.paths для удобного импорта модулей.Использование Karma совместно с TypeScript и karma-coverage позволяет обеспечить прозрачное, детализированное покрытие кода, выявлять пропущенные ветви и улучшать качество программного обеспечения на этапе разработки.