gpt4 book ai didi

javascript - 使用 sinon.js 创建一个 "spy object"带有基于真实构造函数/原型(prototype)的 spy 方法

转载 作者:IT老高 更新时间:2023-10-28 23:19:08 24 4
gpt4 key购买 nike

我使用 sinon.js 作为在我的 Mocha 测试中排除依赖项的一种方式。我更喜欢 'spy' 方法而不是经典的 mock 方法,因为 spy 的内省(introspection)似乎比经典的 mock 对象有点落后的想法更清晰,并且提供了更大的灵 active 。

也就是说,我想知道在为整个对象创建测试 spy 时我是否使用不正确。假设我有一个测试依赖项,上面有 4 个方法,我想 stub 这些方法中的每一个,并对其中的一个或两个进行断言。目前我正在这样做:

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

然后我只问 spyObj.aMethod.callWith(a, b, c) 之类的东西。

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

如果能做这样的事情就好了:

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

如何在 Node.js 中找到构造函数/原型(prototype)的所有方法,以便制作像上面这样的包装器?

这更多是关于排除逻辑,而不是测试对许多方法的调用(我尝试将其限制为一个,或者在推送两个时)。例如,可能会执行不需要的 I/O,或者在执行时需要额外的复杂设备。

最佳答案

从Sinon 1.6.0开始你可以这样做:

var stub = sinon.createStubInstance(MyClass)

参见 Stub API section 中的 sinon.stub 文档或 source .

关于javascript - 使用 sinon.js 创建一个 "spy object"带有基于真实构造函数/原型(prototype)的 spy 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12025035/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com