运行Karma时检测环境

时间:2014-06-18 02:38:55

标签: karma-runner

我有两个环境,我正在运行我的测试(本地和travic ci)。如果我在本地运行它,我需要在测试中做一些调整。

是否可以在没有两个单独的配置文件的情况下使用Karma进行此操作?

1 个答案:

答案 0 :(得分:6)

您可以通过编程方式调用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'
    ]

  });
};

现在我想在开始业力之前稍微调整一下:

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函数中的某个特定属性。

更新

如果你想将参数(例如配置文件路径)传递给你的脚本,那么只需在arguments数组中查找它就可以了。

假设您上面的脚本保存在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