什么是配置.在因果报应中做
What does config.set do in Karma?
这两个配置文件有什么不同?
module.exports = function(config) {
config.set({
basePath: '../..',
frameworks: ['jasmine'],
});
};
和
module.exports = function(config) {
config.basePath = '../..';
config.frameworks = ['jasmine'];
};
第二个更短,可读性更强,但第一个在整个文档中使用。为什么?
简短回答
使用config.set
而不是像在第二个代码片段中那样编写单独的赋值是一个方便的问题。它允许我们编写配置,而不必担心Karma如何创建初始配置对象的无关紧要的细节。
如果您查看源代码,您将看到set
方法的实现为:
this.set = function (newConfig) {
_.merge(config, newConfig, function (obj, src) {
// Overwrite arrays to keep consistent with #283
if (_.isArray(src)) {
return src
}
})
}
使用Lodash的merge
方法。(注意,merge
在Lodash 4中发生了变化。X及以上。在撰写本文时,Karma将Lodash的安装限制在3。x系列。)
merge
方法使得当您调用config.set(otherConfig)
时,它会智能地组合config
和otherConfig
的值。这是一个方便的问题。如果你愿意,你可以为每个值写config.foo.bar = something
,但这样你就不得不担心你所设置的值是否已经有默认值了。
例如,如果我这样做,我不必担心client
是否已经定义,以及它可能存在哪些键:
config.set({
client: {
captureConsole: false,
},
});
最终结果是我将captureConsole
从其true
默认值中关闭,而client
配置选项的其余部分保持其默认值。如果我天真地这样做:
config.client = {
captureConsole: false,
};
我将删除默认设置在config.client
上的其他值(例如useIframe
, clearContext
等)当然,我可以这样做:
config.client.captureConsole = false;
它将工作:在config.client
上定义的其他值将保持不变。但是,Karma创建的默认配置对象并没有为您可以设置的所有可能选项定义值。例如,如果我这样做:
config.customPreprocessors.babelModule = { ... };
我遇到了一个错误,因为没有默认值的customPreprocessors
。我必须这样做:
config.customPreprocessors = {
babelModule: { ... },
};
使用config.set
让我们不必担心这些细节:
config.set({
client: {
captureConsole: false,
},
customPreprocessor: {
babelModule: { ... },
},
});
- 为什么不'当单元测试出现解析错误时,我的因果报应测试会失败
- 因果报应-找不到模块:错误:无法解析模块'scs'
- 如何将因果报应测试报告上传到声纳
- 因果报应,幻影JS和es6承诺
- AngularJS因果报应测试规范承诺未解析,且未调用.then()
- 如何使用console.log在因果报应测试中检查函数
- $routeUpdate未在角因果报应单元测试中广播
- 因果报应测试
- 通过因果报应测试管理angularjs控制器初始化
- 因果报应并没有执行测试用例
- ngRoute不是因果报应实例化的
- 巴贝尔/因果报应/柴给出类型错误:'呼叫者''被叫',和'自变量'在严格模
- 因果报应-如何指向类型脚本覆盖的源地图
- 无法让因果报应运行我的Angular2测试
- 如何用新版本的因果报应取代被弃用的吞咽因果报应
- 将角度控制器添加到因果报应覆盖(伊斯坦布尔)代码覆盖预处理器
- 节点包因果报应没有在没有信息的情况下运行
- 因果报应单元测试'未定义'不是函数错误
- 因果报应测试中的未知提供者
- 什么是配置.在因果报应中做