我也讨厌重复信息。我通过在我的测试套件中使用调用 require.config 两次的 HTML 设置来解决这个问题。
所以我的测试套件中的 HTML 首先加载 RequireJS,然后是通用配置,它在一个名为 requirejs-config.js 的文件中:
<script type="text/javascript" src="lib/requirejs/require.js"></script>
<script type="text/javascript" src="requirejs-config.js"></script>
requirejs-config.js 文件没有什么特别之处。这是一个缩写版本:
require.config({
baseUrl: 'lib/',
paths: {
browser_test: '../../../browser_test',
jquery: 'external/jquery-1.10.2',
bootstrap: 'external/bootstrap/js/bootstrap.min',
// [...]
},
packages: [
{
name: "lodash",
location: "external/lodash"
}
],
shim: {
bootstrap: {
deps: ["jquery"],
exports: "jQuery.fn.popover",
},
// [...]
},
config: {
// [...]
},
enforceDefine: true
});
然后有一个<script> 元素调用require.config 并具有适用于测试环境的设置:
<script>
require.config({
paths: {
'mocha': '/node_modules/mocha',
'chai': '/node_modules/chai/chai'
},
shim: {
'mocha/mocha': {
exports: "mocha",
init: function () { this.mocha.setup('bdd'); return this.mocha; }
}
},
config: {
// [...]
}
});
</script>
('mocha/mocha' shim 看起来很有趣,但它是正确的。)
在这种特定情况下,第二次调用require.config 只会将新值添加到paths、shim 和config,但也可以覆盖之前的值。例如,我可以更改 'jquery' 解析的路径或更改 Bootstrap 的 shim。
您可以看到我在我的测试套件中使用了 Mocha + Chai,但上面的解决方案实际上并不是特定于 Mocha。