2013-09-23 98 views
1

我正嘗試爲超出我的控制範圍的舊JS文件/模塊構建一些單元測試。使用DOH測試自定義模塊

的JS模塊使用下面的模式建...

var myModule = { 
    myMethod:function() { 
    } 
}; 

我則試圖建立一個DOH測試工具來測試這一點。我試過以下...

require([ 
    "doh/runner", 
    "../../myModules/myModule.js" 
    ], function(doh) { 
     console.log(doh); 
     console.log(myModule); 
    }); 

該文件似乎被拾起罰款,但我不能引用任何東西。 「的console.log(Mymodule中);」只是返回undefined。

任何人都知道我可以在DOH測試工具中正確包含外部非dojo模塊JS文件嗎?

感謝

+0

'myModule'返回舊JS模塊中的任何位置嗎?如果是這樣,您需要將其添加到您的回調中,如提到的@DesertIvy。如果不是,並且只是將值分配給某些全局變量,則可能需要通過將它們掛在全局對象上來確保它們實際上是全局的,例如, 'window'並像'window.myModule'那樣訪問它。 –

+0

myModule不會返回到舊JS模塊的任何位置。我怎麼把它掛在窗外? – fatlog

+0

也許在你的模塊文件的底部有'window.myModule = myModule'? –

回答

0

您需要聲明的回調函數myModulerequire聲明:

require([ 
    "doh/runner", 
    "../../myModules/myModule" 
], function(doh, myModule) { // <-- include myModule 
    console.log(doh); 
    console.log(myModule); 
}); 

只要確保myModule.js回報你的模塊。

+0

如果從模塊文件返回'myModule',則不需要創建小部件。大量的dojo模塊不是小部件,大量的模塊遵循@ fatlog模塊的模式,在那裏返回一個靜態對象。 –

+0

你說得對,我已經刪除了令人困惑的小部件。 – Bucket

+0

嗨DesertIvy,我已經試過了。它返回undefined ... – fatlog

1

除了不應該使用DOH,因爲它已被棄用(使用Intern),沒有理由不應該在那裏看到myModule。你正在使用一個腳本地址而不是一個模塊ID,這是不正確的,而且你正在使用一個調用require的相對路徑,這也是不對的,但是如果這些事情中的任何一個阻止加載器查找和加載您嘗試加載它的腳本應該拋出一個錯誤,您可以在控制檯中看到它。唯一的另一種可能是你設法在這個myModule腳本中建立了一個內置層,在這種情況下,整個腳本最終封裝在一個閉包中,所以使用var foo將不再定義全局變量foo

+0

很想使用實習生,但技術的選擇很早以前就已經完成了,並且超出了我的控制範圍。 – fatlog

+0

根據OP提供的信息,它*是*,實際上是唯一的其他可能性。在標準瀏覽器JS文件中使用標準JS對象文字時,沒有「返回」模塊。我也不確定如何指出兩個潛在的錯誤,以及用戶應該期望看到裝載程序是否失敗,是無益的和非建設性的,所以如果你不會冷靜下來,然後離開討厭的話,我將不勝感激註釋。謝謝! –

+0

我相信這個答案至少在正確的軌道上,因爲指出myModule依賴不是真正被正確引用的事實。至於究竟應該是什麼樣的結果,目前任何人都可以猜測,因爲我們沒有關於OP的文件系統結構或該模塊內容的信息。如果實際上沒有足夠的信息靠近,很難讓OP更接近。 –