让我解释一下问题陈述:
我正在使用Mocha,Chai和Sinon。我试图存根一个类似于下面的方法:
myNamespace.myMethod({
beforeSend() { ... }
}, callback)
我想短信myMethod
并打电话给beforeSend
以及callback
。我无法找到有效的解决方案。我尝试了以下但它不起作用:
sinon.stub(myNamespace, 'myMethod').yieldsTo('beforeSend', {}).callsArg(1);
我究竟做错了什么?
不可能为这样的函数调用链接两个不同的行为,所以.callsArg(1)
最终覆盖.yieldsTo('beforeSend', {})
对于这样的事情,你需要提供一个callsFake
的假实现:
const sinon = require('sinon');
const myNamespace = {
myMethod: (obj, callback) => { }
}
it('myMethod', () => {
const beforeSendArg = { };
sinon.stub(myNamespace, 'myMethod').callsFake((obj, callback) => {
obj.beforeSend(beforeSendArg);
callback();
});
const beforeSend = sinon.spy();
const callback = sinon.spy();
myNamespace.myMethod({ beforeSend }, callback);
sinon.assert.calledWithExactly(beforeSend, beforeSendArg); // Success!
sinon.assert.called(callback); // Success!
});