编程语言
首页 > 编程语言> > javascript-使用sinon.js通过基于真实构造函数/原型的间谍方法创建“间谍对象”

javascript-使用sinon.js通过基于真实构造函数/原型的间谍方法创建“间谍对象”

作者:互联网

我正在使用sinon.js作为在我的Mocha测试中消除依赖项的方法.我喜欢“间谍”方法而不是经典的模拟方法,因为与经典的模拟对象相比,间谍的内省似乎更清晰,并且具有更大的灵活性.

就是说,我想知道在为整个对象创建测试间谍程序时是否使用不正确.假设我有一个测试依赖项,上面有4个方法,并且我想对每个方法进行存根,并对其中一个或两个方法进行断言.目前,我正在这样做:

var spyObj = {
  aMethod: sinon.spy(),
  otherMethod: sinon.spy(),
  whatever: sinon.spy()
};

然后我只问诸如spyObj.aMethod.knownWith(a,b,c)之类的事情.

有没有比重复测试套件本身中的方法名称更好的方法来模拟整个类?看起来sinon.stub()试图遍历给定对象的所有成员,但这似乎不能作为在更现代的JS运行时(例如V8)中获取大多数对象的所有方法的一种方式,除非该对象实际上是可数的.它还尝试猴子修补实际对象,而不是返回等效对象,这在某种程度上是不可取的.我只需要一个符合接口的对象,但是表现得像一个空对象,除非我另有说明.

能够执行以下操作将是一件好事:

var spyObject = sinon.spy(MyClass.prototype);

如何创建Node.js中的构造函数/原型的所有方法,以进行如上的包装?

这更多的是讲究逻辑,而不是测试许多方法的调用(我尝试将这些方法限制为一个,或者一推为两个).例如,可能执行不必要的I / O或执行其他复杂设备的事情.

解决方法:

从Sinon 1.6.0开始,您可以执行以下操作:

var stub = sinon.createStubInstance(MyClass)

请参阅Stub API sectionsource中有关sinon.stub的文档.

标签:javascript,node-js,mocha,sinon
来源: https://codeday.me/bug/20191010/1887083.html