我們不使用require.js來實現js源代碼上的模塊,但我想將其用於測試。還有一個問題:我無法將原始* .js文件作爲其他模塊的依賴項來執行。可能嗎?是否可以使用require.js將模塊* .js文件設置爲依賴關係
我的意思是:加載一些* .js文件和模塊後(測試它)。
我們不使用require.js來實現js源代碼上的模塊,但我想將其用於測試。還有一個問題:我無法將原始* .js文件作爲其他模塊的依賴項來執行。可能嗎?是否可以使用require.js將模塊* .js文件設置爲依賴關係
我的意思是:加載一些* .js文件和模塊後(測試它)。
define
工作我用require.js的實施和測試。您可以使用define
加載任何JavaScript文件作爲之前的模塊函數的執行。
define(["test/myTest.js", "test/anotherTest.js"], function(test1, test2) {
// perform your tests
});
requirejs
與asyncTests您也可以後依賴加載內使用require
模塊功能加載代碼。我用它QUnit。以下是我的代碼示例。
首先,確保默認停止QUnit測試運行器(這與其他測試框架類似)。這樣,您可以定義何時運行測試(即加載相關代碼之後)。
QUnit.config.autostart = false
其次,定義您的測試作爲一個模塊。該模塊加載依賴關係,然後定義測試,然後加載要測試的代碼。這隻有在代碼是自執行的時候纔有必要,並且不能事先加載(在這種情況下,你可以直接使用define並使用它)。這裏是我使用Chaplin
庫(用CoffeeScript編寫)的例子。
define(['chaplin'], function(chaplin) {
asyncTest("publish startup complete event", function() {
chaplin.mediator.subscribe("startup~complete", function() {
ok(true, "startup~complete event fired");
});
return requirejs(['modules/startup/startup'], function() {
start();
});
});
});
重要的部分是最後的requirejs
調用。在定義測試之後,它加載要測試的代碼。
EDIT:響應評論 假設存在一個稱爲config
模塊包含配置數據。我也假設一定的格式,所以如果你的格式不同,你可能會做一些小的改變。原則雖然如此。
define(["config"], function(config) {
// assuming config.modules is an array of all development modules,
// config.devPath is the base bath to development modules,
requirejs(
config.modules.map(function(module){
return config.devPath + module
})
, function() {
// all modules loaded, now go on
// however, no reference to modules left, so need to work with `arguments` array
});
});
但是,您應該知道您在回調函數中丟失了對模塊的引用。
是的,很酷,我能做些什麼,如果'config'模塊包含我要從中加載文件的主機,作爲依賴項? – ValeriiVasin
請確認:您有一個名爲'config'的模塊,其中包含其他模塊的主機地址(url)?所以從某種意義上說,你正試圖動態加載你的依賴關係? – davidpfahler
是的,不同的主機:生產/測試等 – ValeriiVasin