2014-01-11 116 views

回答

5

我也很討厭重複信息。我通過在我的測試套件中使用兩次調用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,shimconfig,但它是一個也可以覆蓋較早的值。我可以例如更改'jquery'解決或更改Bootstrap墊片的路徑。

您可以看到我正在使用Mocha + Chai作爲我的測試套件,但上述解決方案實際上並非特定於Mocha。

+2

好主意。我只是忽略了'require.config'可以被調用兩次。 我使用的是業力,所以我按順序包含了app/js/main.js和test/unit/test-main.js,並有選擇地添加或者重寫'require.config'。 –

+0

真棒解決方案@MerlinRan。謝謝你的提示! – tonyhb

+0

@MerlinRan你可以發佈你的解決方案的例子嗎? – deitch