2016-12-08 32 views
1

我正在處理一些回購。並添加重構提取一些功能類Node.js +測試:DI與硬依賴

問題是 - 我更喜歡使用從外部傳遞的依賴關係(DI)。但是我發現它不是node.js應用程序的常見模式。

所以這個問題 - 是否有任何很好的例子(鏈接到回購),其中傢伙使用DI提供依賴關係。

相反的意見是 - 「我們總是可以用proxyquire模塊來模擬依賴」

PS 例子代碼我的建議是

// use 
const inst = new Cls(getDep1(), getDep2()); 
// where getDep1/getDep2 provide dependencies from side modules 

,而不是

//Cls 
const dep1 = require('dep1'); 
const dep2 = require('dep2'); 
module.exports = function Cls() { 
    // deps usage 
} 

// and 
const inst = new Cls(); 

的問題是關於node.js相關項目中的參數

回答

0

你的例子很清楚。如果你想在一個類依賴的測試中配置stub/mock,而不使用proxyquire或mockery或其他一些需要修補程序的話,那麼你必須提供另一個入口點。

,你可以直接在您的例子中使用DI,如:

function Cls(dep1, dep2) { 
    this.dep1 = dep1; 
    this.dep2 = dep2; 
} 

這可以通過自身生活過,那麼你的調用代碼將負責進口類,配置它的依賴,並正確地將其實例化。這樣你的Cls就是隔離的,並且單元可以自行測試。

你也可能使那些需要作爲公共屬性被處理的依賴關係:

const dep1 = require('dep1'); 
const dep2 = require('dep2'); 
module.exports = function Cls() { 
    this.dep1 = dep1; 
    this.dep2 = dep2; 
} 

這可能允許Cls定義中也包含它與它的DEPS關聯代碼的模塊,同時還允許您的單元測試輕鬆配置Cls模擬/存根對象。這依賴於要求副作用免費:(

var cls = new Cls(); 
cls.dep1 = new SomeStub(); 
cls.dep2 = new SomeStub(); 
cls.exercise();