从gulpfile传递karma配置对象

时间:2015-11-14 09:14:00

标签: gulp karma-runner

我有一个karma.conf.js文件,用于导出一个带有config对象的函数,并将一堆配置应用于该对象。

module.exports = function(config) {
    config.set({
        basePath: '',
        frameworks: ['jasmine'],
...

如果我从命令行开始karma,如下所示:karma start,它会正确运行。显然,karma start函数在调用config导出的函数时插入所需的karma.conf.js对象。

我试图用一个看起来像这样的gulp任务来启动它:

gulp.task('test', function (done) {
  var karma = require('karma').server;
  var karmaConf = require('./karma.conf.js')();
  karma.start(karmaConf, done);
});

这给了我一个错误,因为缺少config参数。

两个问题:

  1. 如何将karma配置对象作为参数包含在内,

  2. 有更好的方法吗?

2 个答案:

答案 0 :(得分:1)

试试这个:

gulp.task('test', function(done) {
  var Server = require('karma').Server;
  new Server({
    configFile: __dirname + '/karma.conf.js',
    singleRun: true
  }, done).start();
});

答案 1 :(得分:0)

我知道这个问题有点老了,但是当我打算将自己的q / a发布到类似的东西时,我发现了它。主要区别在于我没有使用gulp,而是直接使用Karma的公共API。我仍然坚持使用Karma v0.12,但看起来规范在这方面并没有改变。它仍然需要一个普通的对象,我的配置文件导出一个函数,就像在OP的情况下一样。

问题中的示例主要问题是尝试调用config函数而不提供任何参数。这可能是抛出错误的原因。特别是,config函数需要单个输入config,并调用config.set(actualConfigObject)。我所做的是编写一个我自己的函数,它提供了一个非常合适的对象。

所需要的只是确保传递给config函数的函数具有set函数,该函数以某种方式捕获其第一个参数供以后使用。我实际上最终将所有这些包装在一个函数中,以便于返回参数:

function extractConfig(configFunction) {
    var last;
    var shell = {
        set: function (input) { last = input; }
    };
    configFunction(shell);
    return last;
}

然后我可以使用我所需的配置文件调用它:

var config = extractConfig(require('./local-karma.conf.js'));

让我的测试运行了。我注意到有些东西略有偏差,因为我覆盖了配置中的日志记录级别,但API似乎无论如何使用config.LOG_DEBUG。但那是我迄今为止唯一的问题。虽然this unanswered question似乎也在做类似的事情,但结果不太成功。