例如,此test-main.js和此main.js具有重複的路徑和墊片。對於大型項目,可能會有很多。我甚至可以使用grunt-bower-requirejs plugin將安裝的Bower組件添加到main.js中,但在此之後,我必須手動或通過程序將它們複製到test-main.js。Karma和RequireJS:避免重複src和測試RequireJS配置
是否有任何方便的方法來避免這種重複,例如告訴RequireJS包含另一個配置文件?
例如,此test-main.js和此main.js具有重複的路徑和墊片。對於大型項目,可能會有很多。我甚至可以使用grunt-bower-requirejs plugin將安裝的Bower組件添加到main.js中,但在此之後,我必須手動或通過程序將它們複製到test-main.js。Karma和RequireJS:避免重複src和測試RequireJS配置
是否有任何方便的方法來避免這種重複,例如告訴RequireJS包含另一個配置文件?
我也很討厭重複信息。我通過在我的測試套件中使用兩次調用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
與適用於測試環境設置:(該'mocha/mocha'
墊片看起來很滑稽,但它是正確的)
<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>
在這種特定情況下,第二次調用require.config
僅將新值添加到paths
,shim
和config
,但它是一個也可以覆蓋較早的值。我可以例如更改'jquery'
解決或更改Bootstrap墊片的路徑。
您可以看到我正在使用Mocha + Chai作爲我的測試套件,但上述解決方案實際上並非特定於Mocha。
好主意。我只是忽略了'require.config'可以被調用兩次。 我使用的是業力,所以我按順序包含了app/js/main.js和test/unit/test-main.js,並有選擇地添加或者重寫'require.config'。 –
真棒解決方案@MerlinRan。謝謝你的提示! – tonyhb
@MerlinRan你可以發佈你的解決方案的例子嗎? – deitch