如何解决监视 Sinon.js 中的原型方法
使用 sinon,我试图监视原型方法。它在在线 howtos 等中看起来很简单。我尝试了很多网站和类似这样的帖子:Stubbing a class method with Sinon.js 或 sinon - spy on toString method,但它对我不起作用。
先决条件
我正在使用 http.d.ts https://github.com/nodejs/node/blob/master/lib/_http_outgoing.js 通过 OutgoingMessage
对象从异步 API 调用写回数据:
class OutgoingMessage extends stream.Writable
OutgoingMessage.prototype.end = function end(chunk,encoding,callback) {
Get = async (req:IncomingMessage,res:OutgoingMessage):Promise<void> => {...
...
res.end(data)
...
}
我的测试
在我的测试中,我调用了 Get
方法。我的 IncomingMessage
决定了我对 OutgoingMessage
的期望。
it("should call end with the correct value",async function(){
...
let outgoingMessageSpy = sinon.spy(OutgoingMessage.prototype,"end");
let anOutgoingMessage = <OutgoingMessage>{};
...
expect(outgoingMessageSpy.calledOnce).to.be.true();
}
调试测试用例我看到 end
是如何被调用的,但显然我没有以正确的方式设置我的间谍,因为我的期望失败了,calledOnce
是 false
。检查对象时,我发现 calledCount
是 0
。
我做的时候基本上是一样的(在我看来)
const toStringSpy = sinon.spy(Number.prototype,"toString");
expect(toStringSpy.calledWith(2)).to.be.true;
这行得通。不过,我确实注意到,VS Code 以不同的方式突出显示 prototype
和 Number.prototype
的关键字 OutgoingMessage.prototype
。那是相关的吗?鼠标悬停时显示 NumberConstructor.prototype
但只有 OutgoingMessage.prototype
..
问题
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。