2016-11-18 39 views
0

讓我的天賦我寫的後續說,使用Jasmine進行單元測試時,如何在不需要'子需求'的情況下需要文件?

const moduleA = require('moduleA'); 

...在moduleA它將需要另外一個模塊說「moduleB」

在我看來單元測試應該是獨立的,和所有的依賴應該被嘲笑。但我找不到需要moduleB的moduleA的好方法。

任何建議如何做到這一點?提前致謝。

事情我已經嘗試: rewirejs(https://github.com/jhnns/rewire),這似乎不錯,但仍需需要moduleB纔可以真正替代moduleB

回答

0

你可以有你的模塊導出將依賴作爲一個功能(而不是要求)。所以你必須:

/*moduleA*/ 
module.export = function(depB){ 
    /*your code here*/ 
}); 

當你導入moduleA你這樣做:

var moduleB = require('moduleB'); 
var moduleA = require('moduleA')(moduleB); 

另一種方法是將一個依賴關係樹傳遞到子模塊:

const platform = { 
    moduleA : require('moduleA'), 
    moduleB : require('moduleB'), 
} 

var moduleA = platform.moduleA(platform); 

而且在moduleA

module.export = function(platform){ 
    var moduleB = platform.moduleB; //your dependency here 
    //for consistency you'd also want to export a function that takes the depdency tree even if it doesnt take a dependency (so module configuration remains consistent across all your modules) 
} 

以這種方式替換模擬的依賴將會非常容易。關於此主題herehere有更多。

+0

感謝您的建議,在我的項目中,一個文件實際上需要大量的依賴關係,因此需要moduleA將變成require('moduleA')(moduleB,moduleC,moduleD,moduleE ...),這是一種笨拙的我的情況。 – Hao

+0

然後我推薦第二種方法,它放在我放的最後一個鏈接上。我會舉一個例子。 – MinusFour

+0

這看起來非常棒,謝謝! – Hao

相關問題