Node.js+;测试:DI与硬依赖
我在搞回购协议。并添加重构以将某些功能提取到类中 问题是——我更喜欢使用从外部传递依赖项(DI)。但我发现这不是node.js应用程序的常见模式 所以问题是,有没有好的例子(到repos的链接)让人们使用DI来提供依赖关系 相反的观点是--“我们总是可以使用Node.js+;测试:DI与硬依赖,node.js,unit-testing,dependency-injection,Node.js,Unit Testing,Dependency Injection,我在搞回购协议。并添加重构以将某些功能提取到类中 问题是——我更喜欢使用从外部传递依赖项(DI)。但我发现这不是node.js应用程序的常见模式 所以问题是,有没有好的例子(到repos的链接)让人们使用DI来提供依赖关系 相反的观点是--“我们总是可以使用proxyquire模块来模拟依赖关系” 附言 我建议的代码示例如下 // use const inst = new Cls(getDep1(), getDep2()); // where getDep1 / getDep2 provide
proxyquire
模块来模拟依赖关系”
附言
我建议的代码示例如下
// 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相关项目中的参数您的示例非常清楚。如果您想在测试中为类依赖项配置存根/模拟,而不使用proxyquire或mockry或其他一些require补丁程序,那么您必须在代码中提供另一个入口点 您可以在示例中明确使用DI-like:
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
模块也包含将其与其dep关联的代码,同时仍然允许您的单元测试使用mock/stub对象轻松配置Cls
。这取决于无副作用的要求:(
您的示例非常清楚。如果您想在测试中为类依赖项配置存根/模拟,而不使用proxyquire或Mockry或其他一些require修补程序,那么您必须在代码中提供另一个入口点 您可以在示例中明确使用DI-like:
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
模块也包含与其dep关联的代码,同时仍然允许您的单元测试使用mock/stub对象轻松配置Cls
。这取决于无副作用的要求:(