karma start -branding="clientX"
然后在我的规范的某个地方我需要访问这个变量(我需要“clientX”值).
这有可能吗?
it("get karma args",function () { console.log(__karma__.config.args); });
业力跑
如果你想通过karma运行传递参数,那么上面就是你所需要的.
然后,如果你做业力开始然后业力运行 – 你应该在控制台上看到:
LOG: ['--foo']
注意传递给karma run的参数如何在__karma __.config.args中结束.另请注意,在业力运行中的第一个双击 – – foo是将Karma参数与“客户参数”分开是必要的. (业力开始并没有同样的区别.)
业力开始
业力开始有所不同.
如果你使用karma init创建的默认karma.conf.js,你将无法通过karma start –single-run –foo以这种方式传递参数.你需要修改你的karma.conf.js来传递参数:
module.exports = function(config) { config.set({ client: { args: config.foo ? ["--foo"] : [],},
如果你运行karma start –single-run –foo,那么你将获得与之前运行相同的输入.
如果我必须传递多个参数,我会扫描process.argv以过滤掉那些仅用于Karma的好处的部分,并将其余部分传递给args而不是测试每种可能性.
你可能从上面推断出,当你的业力开始时 – 单一运行 – 这个论点最终成为karma.conf.js中的config.something.
完整的例子
此示例针对Karama 1.1.x和Karma 1.2.0进行了测试.它显示了我上面讨论的相同方法,以使命令行参数通过client.args传输.这适用于业力开始和业力运行.我还添加了一个方法来传递值而不通过client.args(这是品牌推广示例).但是,此方法不适用于业力运行.
karma.conf.js:
module.exports = function(config) { config.set({ basePath: '',client: { // Example passing through `args`. args: config.foo ? ["--foo"] : [],// It is also possible to just pass stuff like this,// but this works only with `karma start`,not `karma run`. branding: config.branding,frameworks: ['jasmine'],files: [ 'test/**/*.js' ],exclude: [],preprocessors: {},reporters: ['progress'],port: 9876,colors: true,logLevel: config.LOG_INFO,autoWatch: true,browsers: ['Chrome'],singleRun: false }); };
测试/ test.js:
it("get karma arg",function () { console.log("BRANDING",__karma__.config.branding); console.log("ARGS",__karma__.config.args); });
如果你运行karma start –single-run –foo –branding = q,你得到:
LOG: 'BRANDING','q' LOG: 'ARGS',['--foo']
如果你启动Karma然后使用karma run – –foo –branding = q,你会得到:
LOG: 'BRANDING',undefined LOG: 'ARGS',['--foo','--branding=q']
如上所述,当使用karma运行时,所有内容都必须通过config.args才能在测试中看到.