我有一个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
参数。
两个问题:
如何将karma配置对象作为参数包含在内,
有更好的方法吗?
答案 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似乎也在做类似的事情,但结果不太成功。