私はまた、情報を複製することを嫌います。テストスイートでrequire.config
を2回呼び出すHTML設定を使用して、この問題を回避します。私のテストスイートが最初にロードさRequireJSでそう
HTML、その後、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
});
はその後、テスト環境に適用する設定でrequire.config
を呼び出し<script>
要素があります:
<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'
シムはおかしいが、それは正しいです。)
この具体的なケースでは、への2回目の呼び出しでは、paths
,shim
およびconfig
に新しい値が追加されますが、可能であれば、より先にの値を上書きすることができます。たとえば、'jquery'
が解決するパスを変更したり、ブートストラップのシムを変更することができます。
私は私のテストスイートにMocha + Chaiを使用していますが、上記の解決策は実際にはMocha特有のものではありません。
素晴らしいアイデア。私はちょうど 'require.config'が2回呼び出すことができることを無視しました。 私はkarmaを使用していますので、app/js/main.jsとtest/unit/test-main.jsの両方を順番に追加し、 'requires.config'を選択的に追加または上書きしました。 –
素晴らしいソリューション@マーリンラン。ヒントをありがとう! – tonyhb
@MerlinRanあなたのソリューションの例を投稿できますか? – deitch