我使用 sinon.js 作为在我的 Mocha 测试中排除依赖项的一种方式。我更喜欢 'spy' 方法而不是经典的 mock 方法,因为 spy 的内省似乎比经典的 mock 对象有点落后的想法更清晰,并且提供了更大的灵活性。
也就是说,我想知道在为整个对象创建测试间谍时我是否使用不正确。假设我有一个测试依赖项,上面有 4 个方法,我想存根这些方法中的每一个,并对其中的一个或两个进行断言。目前我正在这样做:
var spyObj = {
aMethod: sinon.spy(),
otherMethod: sinon.spy(),
whatever: sinon.spy()
};
然后我只问诸如spyObj.aMethod.calledWith(a, b, c)
.
有没有比在测试套件本身中重复方法名称更好的方法来模拟整个类?看起来 sinon.stub() 试图遍历给定对象的所有成员,但这似乎不能作为在更现代的 JS 运行时(如 V8)中获取大多数对象的所有方法的一种方式,除非对象实际上是可枚举的东西。它还尝试对实际对象进行修补,而不是返回等效对象,这在某种程度上是不可取的。我只需要一个符合接口的对象,但行为类似于空对象,除非我另有说明。
能够执行以下操作会很好:
var spyObject = sinon.spy(MyClass.prototype);
如何在 Node.js 中找到构造函数/原型的所有方法,以便制作像上面这样的包装器?
这更多是关于排除逻辑,而不是测试对许多方法的调用(我试图限制为一个,或者推送两个)。例如,可能会执行不需要的 I/O 或执行时需要额外的复杂夹具的事情。