javascript - 为什么在内部对象上返回正确的 sinon.stub()
问题描述
我需要存根一个链式函数:
io.in(param).emit(param);
为此,我创建了一个像这样的存根:
sandbox.stub(io, 'in').returns({
emit: sinon.stub(),
});
我发现我可以使用以下方法进行断言:
io.in().emit
例如我可以断言:
sinon.assert.calledOnce(io.in().emit);
为什么这实际上有效?据我所知,每次io.in()
调用都会创建一个新对象,该对象对过去的存根记录一无所知。
解决方案
每次调用都io.in()
可能返回一个不同的对象,但您已经sinon
准确地告诉了您希望存根为每次调用返回什么:文字对象:
{
emit: sinon.stub(),
}
您已将该对象传递给return
,对 的参数进行return
评估,然后return
使用此参数调用函数。return
每次调用存根时都不需要再次调用。如果您想要这种行为,您可以callsFake
每次都使用并返回新对象。
你可以把它想象成这样:
function returns(val){
return () => val
}
function stub(){
console.log("stub called")
return () => "I'm a stubb"
}
let f = returns({key: stub()})
// stubb only called once - even with two f() calls
// both calls to f() return idential objects
console.log(f() === f()) // same value on each call?
console.log(f()) // doesn't call stub again
推荐阅读
- python - 在 Windows 提示符下运行时出现 Python SyntaxError
- python - Python函数及操作
- aem - 在 Slightly 的条件元素中包装标记?
- c# - 从打开的 DataReader 中返回一个新对象 - 好不好?
- java - 在 Java 中使用 Hibernate 加入嵌入式 ID 列
- python - libvips / pyvips 访问多通道 tiff (OME-Tiff) 的一小部分
- python - 在函数 2 中使用函数 1 创建的 pandas 数据框?
- visual-studio-code - VSCode + 远程 WSL 某些功能不起作用
- python - 如何使用 python 从网站上抓取段落?
- java - 多态性实现对子字段的强制通用更改