2016-12-08 35 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();