karma-typescript — это плагин для Karma, позволяющий интегрировать TypeScript в процесс тестирования JavaScript-приложений. Он выполняет компиляцию TypeScript, обрабатывает зависимости модулей и обеспечивает покрытие кода с минимальной настройкой. Правильная конфигурация этого инструмента критична для стабильной работы тестов и точной генерации отчетов о покрытии.
Для работы karma-typescript необходимы следующие пакеты:
npm install --save-dev karma karma-typescript typescript
npm install --save-dev karma-jasmine jasmine-core
Дополнительно можно установить плагины для генерации отчетов о покрытии кода:
npm install --save-dev karma-coverage-istanbul-reporter
Файл tsconfig.json должен быть адаптирован под
тестирование. Основные параметры:
{
"compilerOptions": {
"target": "ES6",
"module": "commonjs",
"sourceMap": true,
"outDir": "./dist",
"strict": true,
"esModuleInterop": true
},
"include": ["src/**/*.ts", "test/**/*.ts"]
}
Ключевые моменты:
sourceMap: true необходим для корректного отображения
ошибок в тестах и покрытия кода.include должен содержать и исходники, и тесты.module: commonjs требуется для работы Karma с
NodeJS-плагинами.Файл karma.conf.js содержит настройки для интеграции
TypeScript через плагин:
module.exports = function(config) {
config.set({
frameworks: ['jasmine', 'karma-typescript'],
files: [
{ pattern: 'src/**/*.ts' },
{ pattern: 'test/**/*.ts' }
],
preprocessors: {
'src/**/*.ts': ['karma-typescript'],
'test/**/*.ts': ['karma-typescript']
},
reporters: ['progress', 'karma-typescript'],
browsers: ['ChromeHeadless'],
singleRun: true,
karmaTypescriptConfig: {
tsconfig: './tsconfig.json',
bundlerOptions: {
sourceMap: true,
transforms: [
require('karma-typescript-es6-transform')()
]
},
coverageOptions: {
instrumentation: true
},
reports: {
"html": "coverage",
"text-summary": ""
}
}
});
};
Разбор ключевых блоков:
frameworks — включает
karma-typescript перед тестовым фреймворком, чтобы
TypeScript компилировался до запуска тестов.
files — указывает на все файлы, которые должны участвовать в тестировании.
preprocessors — задаёт обработку файлов через
karma-typescript.
reporters — определяет вывод прогресса и отчетов о покрытии.
karmaTypescriptConfig — внутренние настройки плагина:
tsconfig — путь к конфигурации TypeScript.bundlerOptions.transforms — позволяет добавлять
трансформации, например для поддержки ES6.coverageOptions.instrumentation — включение подсчета
покрытия кода.reports — определяет формат и путь для отчётов.Для непрерывной интеграции важно использовать безголовые браузеры
(ChromeHeadless, FirefoxHeadless) и
singleRun: true. Это гарантирует автоматическое завершение
тестов без вмешательства пользователя. Пример скрипта в
package.json:
"scripts": {
"test": "karma start --single-run",
"test:watch": "karma start"
}
test запускает один раз и завершает процесс.test:watch запускает тесты в режиме наблюдения за
изменениями файлов.karma-typescript использует встроенный бандлер. Основные моменты:
CommonJS vs ES Modules Karma автоматически
бандлит CommonJS. Для ES Modules нужна дополнительная трансформация
через karma-typescript-es6-transform.
Порядок файлов Включение зависимостей в
files должно соответствовать порядку импорта, иначе могут
возникнуть ошибки ReferenceError.
Совместимость с библиотеками Для некоторых
библиотек (например, RxJS, Lodash) может понадобиться исключить
исходники из покрытия через coverageOptions.exclude:
coverageOptions: {
instrumentation: true,
exclude: [/node_modules/]
}karma-typescript поддерживает HTML, lcov, текстовые отчеты. Пример настройки:
reports: {
"html": "coverage",
"lcovonly": {
"directory": "coverage",
"filename": "lcov.info"
},
"text-summary": ""
}
Особенности:
text-summary выводит краткую сводку в консоль.Кэширование karma-typescript автоматически кэширует скомпилированные файлы для ускорения повторных запусков.
karmaTypescriptConfig: {
bundlerOptions: {
cache: true
}
}Избегание лишних файлов Не включать большие
внешние библиотеки или node_modules в
files.
Совместное использование sourceMap
sourceMap: true ускоряет дебаг и обеспечивает корректные
отчеты покрытия без дополнительных трансформаций.
Трансформации Позволяют интегрировать Babel, ES6-полифиллы или другие компиляторы поверх TypeScript.
Настройка coverage Возможность исключения конкретных файлов или папок, установка порогов покрытия:
coverageOptions: {
instrumentation: true,
exclude: ["test/**/*.ts"],
thresholds: {
global: {
statements: 80,
branches: 75,
functions: 85,
lines: 80
}
}
}Совместимость с другими фреймворками Помимо Jasmine, можно использовать Mocha, QUnit, Jest в связке с Karma через соответствующие плагины.
karma-typescript обеспечивает полный цикл тестирования TypeScript-проектов: компиляцию, бандлинг, запуск тестов и генерацию отчетов покрытия. Грамотная настройка конфигурации повышает стабильность тестов, ускоряет повторные запуски и упрощает интеграцию в CI/CD.