Обнаружение среды при запуске Karma

#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