#karma-runner
#karma-runner
Вопрос:
У меня есть две среды, в которых я запускаю свои тесты (локально и travic ci). И мне нужно внести несколько изменений в мои тесты, если я запускаю их локально.
Возможно ли это сделать с помощью Karma без наличия двух отдельных файлов конфигурации?
Комментарии:
1. Я бы использовал оболочку для запуска karma и из этой оболочки изменил конфигурацию в зависимости от местоположения.
2. Изменяя конфигурацию, вы имеете в виду выбор файла конфигурации?
3. Я имею в виду, что вы можете программно вызвать karma и передать ему объект конфигурации. Я напишу ответ об этом.
Ответ №1:
Вы можете программно вызвать karma и передать ему объект конфигурации, а затем прослушать обратный вызов, чтобы закрыть сервер:
karma.server.start(config, function (exitCode){
if(exitCode){
console.err('Error in somewhere!');
}
});
Объект конфигурации — это, по сути, объект, который содержит некоторые свойства, и вы можете использовать его для расширения уже имеющегося у вас файла конфигурации скелета.
Представьте, что у вас есть файл конфигурации, подобный следующему в ‘path/to/karma.conf.js ‘:
// Karma configuration
module.exports = function(config) {
config.set({
// base path, that will be used to resolve files and exclude
basePath: '../',
// frameworks to use
frameworks: ['mocha'],
files: [ ... ].
// test results reporter to use
// possible values: 'dots', 'progress', 'junit', 'growl', 'coverage'
// choose it before starting Karma
// web server port
port: 9876,
// enable / disable colors in the output (reporters and logs)
colors: true,
// enable / disable watching file and executing tests whenever any file changes
autoWatch: false,
browsers: ['PhantomJS'],
// If browser does not capture in given timeout [ms], kill it
captureTimeout: 60000,
// Continuous Integration mode
// if true, it capture browsers, run tests and exit
singleRun: true,
plugins: [
'karma-mocha',
'karma-phantomjs-launcher'
]
});
};
Теперь я хочу немного подправить его перед запуском karma:
function enrichConfig(path){
var moreConfig = {
// say you want to overwrite/choose the reporter
reporters: ['progress'],
// put here the path for your skeleton configuration file
configFile: path
};
return moreConfig;
}
var config = enrichConfig('../path/to/karma.conf.js');
В настоящее время с помощью этой техники мы создаем несколько конфигураций для всей нашей среды.
Я думаю, вы можете настроить свой конфигурационный файл TravisCI для передачи некоторых аргументов оболочке, чтобы активировать какое-то конкретное свойство в enrichConfig
функции.
Обновить
Если вы хотите передать параметры (например, путь к файлу конфигурации) в свой скрипт, просто найдите в массиве аргументов, чтобы выбрать его.
Предположим, что ваш скрипт над ним сохранен в startKarma.js
файле, измените свой код на этот:
var args = process.argv;
// the first two arguments are 'node' and 'startKarma.js'
var pathToConfig = args[2];
var config = enrichConfig(pathToConfig);
затем:
$ node startKarma.js ../path/to/karma.conf.js