Node.js +测试:DI与硬依赖关系

时间:2016-12-08 11:20:25

标签: node.js unit-testing dependency-injection

我正在处理一些回购。并添加重构以将一些功能提取到类

问题是 - 我更喜欢使用来自外部的传递依赖(DI)。但我发现它不是node.js应用程序的常见模式。

所以问题是 - 是否有任何好的例子(链接到repos),其中人们使用DI提供依赖。

相反的意见是 - “我们总是可以使用def view_Course(myCourse): print("Courses' Name: ",myCourse.getName()) print("Courses' Number: ",myCourse.getNumber()) print("Courses' Units: ",myCourse.getUnits()) print("Courses' Instructor: ",myCourse.getInstructor()) main() 模块来模拟依赖”

P.S 我建议的代码示例是

proxyquire

而不是

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

问题是关于node.js相关项目中的参数

1 个答案:

答案 0 :(得分:0)

你的例子很清楚。如果要在不使用proxyquire或mockery或其他需要修补程序的情况下在测试中为类依赖项配置存根/模拟,则必须在代码中提供另一个入口点。

您可以在示例中明确使用DI:

Cls

它可以自行生存,然后您的调用代码将负责导入您的类,配置其依赖项并正确实例化它。这样,您的const dep1 = require('dep1'); const dep2 = require('dep2'); module.exports = function Cls() { this.dep1 = dep1; this.dep2 = dep2; } 就会被隔离,并且可以自行测试。

您还可以公开需要作为公共属性处理的依赖项:

Cls

这可能允许定义Cls的模块也包含将其与其deps相关联的代码,同时仍允许您的单元测试使用mock / stub对象轻松配置var cls = new Cls(); cls.dep1 = new SomeStub(); cls.dep2 = new SomeStub(); cls.exercise(); 。这依赖于要求无副作用:(

newDB.myTable (field)