Node中的依赖注入和接口
Dependency Injection and Interfaces in Node
来自c#背景,我使用接口作为模拟对象的基础。我自己创建了自定义模拟对象,并在c#接口上创建了模拟实现。
如何在JS或node中做这样的事情?创建一个可以"模拟"的接口,并且该接口将为能够实现该接口的实际类服务?这在JS或Node世界中有意义吗?
例如,在Java中,同样的处理,定义一个带有方法存根的接口,并使用它作为基础来创建真正的类或模拟类。
不幸的是,您将无法找到作为JavaScript一部分的标准接口。我从未使用过c#,但我使用过Java,如果我错了请纠正我,但看起来您正在谈论为模拟测试目的创建接口和重写方法,以及能够在其他类中实现这些接口。
因为这不是一个标准的JavaScript特性,所以我想你会发现这里有很多非常广泛的答案。然而,为了了解一些流行的库是如何实现这一点的,我可能会建议看看AngularJS是如何看待模拟测试的(网上有很多资源,只要谷歌一下就可以了)。作为起点,看看他们如何使用ngMock
模块与Karma和Jasmine。
同样,由于JavaScript的非常灵活的性质,你会发现,你可以覆盖任何类型的"类方法"(即,任何函数对象,它是另一个对象的成员,无论是new
'ed"类"或普通对象)通过简单地重新实现它,无论你需要…它没有特殊的语法。为了理解在哪里以及如何实现这一点,我建议从头开始查看 JavaScript如何使用原型/原型继承。首先可以考虑这样一个示例:
function Cat(config) {
if(typeof config !== 'undefined') {
this.meow = config.meow; // where config can possibly implement certain mock methods
}
}
Cat.prototype = {
this.meow = function() {
// the meow that you want to use as part of your "production" code
};
};
var config = {};
config.meow = function() {
// some mock "meow" stuff
};
var testCat = new Cat(config); // this one will use the mock "Cat#meow"
var realCat = new Cat(); // this one will use the prototype "Cat#meow"
在上面的例子中,由于JavaScript查找原型链的方式,如果它在类本身中看到实现,它将停在那里并使用该方法(因此,您已经"覆盖"了原型方法)。然而,在这个例子中,如果你没有传递一个config
,那么它会一直寻找Cat#meow
方法的原型,并使用那个。
TL;DR:没有一种实现JavaScript接口的好方法,尤其是那些兼作mock的接口(甚至没有一种实现依赖注入的最好方法……这对JavaScript本身来说也是一个陌生的概念,尽管许多库在某些用例中成功地实现了它。
- 使用Objective-C的JavaScript注入方法
- 正在注入包含JS的HTML
- 迷你$provider注入茉莉花和角
- Angularjs工厂注入错误
- 如何在GoogleWeb工具包(GWT)中从JSNI调用接口(实例化)
- RubyonRails——构建交互式接口应该朝哪个方向发展
- Ember.js-接口状态应该存储在哪里
- 通过命令行/批处理文件打开页面时,将javascript代码注入Google Chrome
- 如何在Ionic Android中将Javascript注入到web视图中
- 理解typescript中的构造函数接口
- Android Webview通过Javascript注入CSS
- Meteor:在启动时将html注入客户端文件
- 注入工厂时,Angular停止工作
- 如何建立一个网页,检查我的路由器网络接口是否可以访问
- 注入Javascript以选择具有指定值的所有单选按钮
- XSS通过地址栏注入
- 注入angularjs指令
- 如何在android webview中注入javascript接口
- Node中的依赖注入和接口
- Javascript -没有实现契约(接口)的依赖注入