В процессе тестирования JavaScript-приложений с помощью Karma часто возникает необходимость адаптировать конфигурацию под разные окружения: локальная разработка, CI/CD, продакшн-тестирование. Использование переменных окружения позволяет динамически менять параметры запуска, выбор браузеров, пути к файлам и уровни логирования без необходимости редактировать основной конфигурационный файл.
Переменные окружения устанавливаются на уровне операционной системы
или через инструменты запуска тестов. В Node.js доступ к ним
осуществляется через объект process.env. Пример простого
задания переменной:
export TEST_ENV=ci
или для Windows:
set TEST_ENV=ci
После этого в конфигурационном файле Karma можно использовать
process.env.TEST_ENV для динамического изменения
параметров:
module.exports = function(config) {
const isCI = process.env.TEST_ENV === 'ci';
config.set({
basePath: '',
frameworks: ['jasmine'],
files: ['src/**/*.js', 'test/**/*.spec.js'],
reporters: ['progress', isCI ? 'junit' : 'dots'],
browsers: isCI ? ['ChromeHeadless'] : ['Chrome'],
singleRun: isCI,
concurrency: Infinity,
logLevel: isCI ? config.LOG_WARN : config.LOG_INFO
});
};
В этом примере изменяется репортер, выбор
браузера, режим одиночного запуска и уровень логирования в
зависимости от значения переменной TEST_ENV.
.env
файловДля удобства управления переменными окружения часто применяют
.env файлы с последующей загрузкой через пакет
dotenv.
Пример структуры .env файла:
TEST_ENV=ci
BROWSER=ChromeHeadless
LOG_LEVEL=warn
Загрузка этих переменных в конфигурацию Karma:
require('dotenv').config();
module.exports = function(config) {
const browser = process.env.BROWSER || 'Chrome';
const logLevel = process.env.LOG_LEVEL || 'info';
config.set({
frameworks: ['jasmine'],
files: ['src/**/*.js', 'test/**/*.spec.js'],
reporters: ['progress'],
browsers: [browser],
logLevel: config[`LOG_${logLevel.toUpperCase()}`],
singleRun: process.env.TEST_ENV === 'ci'
});
};
Такой подход позволяет централизованно управлять настройками для разных окружений без изменения кода конфигурации Karma.
Karma поддерживает подключение различных плагинов, таких как
karma-coverage, karma-junit-reporter и
karma-sourcemap-loader. Их активация может зависеть от
переменных окружения:
const useCoverage = process.env.USE_COVERAGE === 'true';
module.exports = function(config) {
const plugins = [
'karma-jasmine',
'karma-chrome-launcher',
];
if (useCoverage) {
plugins.push('karma-coverage');
}
config.set({
frameworks: ['jasmine'],
files: ['src/**/*.js', 'test/**/*.spec.js'],
reporters: ['progress'].concat(useCoverage ? ['coverage'] : []),
plugins,
preprocessors: useCoverage ? {
'src/**/*.js': ['coverage']
} : {},
browsers: ['ChromeHeadless']
});
};
Использование переменных окружения позволяет включать или отключать инструменты анализа покрытия без дублирования конфигураций для разных целей.
В package.json удобно задавать скрипты с передачей переменных окружения:
{
"scripts": {
"test:dev": "TEST_ENV=dev karma start",
"test:ci": "TEST_ENV=ci karma start"
}
}
На Windows с помощью cross-env:
{
"scripts": {
"test:ci": "cross-env TEST_ENV=ci karma start"
}
}
Это обеспечивает единообразие запуска и автоматическое подхватывание переменных для разных систем.
Переменные окружения полезны для изменения списка тестируемых файлов или исключений. Например:
const testPattern = process.env.TEST_PATTERN || 'test/**/*.spec.js';
module.exports = function(config) {
config.set({
files: [
'src/**/*.js',
testPattern
]
});
};
Такой подход позволяет запускать отдельные наборы тестов без изменения конфигурации.
.env или отдельном конфигурационном
файле.TEST_ENV, USE_COVERAGE, BROWSER,
LOG_LEVEL — это облегчает понимание и поддержку.Использование переменных окружения в конфигурации Karma делает тестовую среду гибкой, расширяемой и удобной для интеграции с различными процессами разработки и автоматизации.