首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >节点中的依赖注入和接口

节点中的依赖注入和接口
EN

Stack Overflow用户
提问于 2015-08-03 05:38:52
回答 1查看 1.1K关注 0票数 1

来自C#背景,我使用接口将我的模拟对象作为基础。我自己创建了自定义模拟对象,并在C#接口上创建了模拟实现。

如何在JS或节点中执行这样的操作?创建一个您可以“模拟”的接口,该接口也将为能够实现该接口的实际类服务?这在JS或Node World中有意义吗?

例如,在Java中,同样的处理,定义一个带有方法存根的接口,并使用它作为创建真实类或模拟类的基础。

EN

回答 1

Stack Overflow用户

发布于 2015-08-03 05:57:40

不幸的是,您将无法找到标准接口作为JavaScript的一部分。我从未使用过C#,但我使用过Java,如果我错了,请纠正我的错误,但看起来您正在讨论为两个模拟测试目的创建接口和重写方法,以及能够在其他类中实现这些接口。

因为这不是一个标准的JavaScript特性,--我想你会发现这里会有很多非常宽泛的答案--。然而,为了了解一些流行的库是如何实现这一点的,我可能会建议看看AngularJS如何看待模拟测试(网上有很多资源,只需谷歌就行了。作为一个起点,看看他们是如何与Karma和Jasmine一起使用ngMock模块的。

此外,由于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如何查找prototype链,如果它在类本身中看到一个实现,它将停止使用该方法(因此,您已经“重写”了prototype方法)。但是,在这个示例中,如果您没有传入一个config,那么它将一直查找Cat#meow方法的原型,并使用该方法。

TL;DR:没有一种很好的方法来实现JavaScript接口,特别是那些双重模拟的接口(甚至没有最好的方法来实现依赖注入.对于JavaScript本身来说,这也是一个外来的概念,尽管许多库确实成功地为cetain用例实现了它。)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31780103

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档