有没有办法使用sinon存根方法,其中方法有两个参数

问题描述 投票:2回答:1

让我解释一下问题陈述:

我正在使用Mocha,Chai和Sinon。我试图存根一个类似于下面的方法:

myNamespace.myMethod({
  beforeSend() { ... }
}, callback)

我想短信myMethod并打电话给beforeSend以及callback。我无法找到有效的解决方案。我尝试了以下但它不起作用:

sinon.stub(myNamespace, 'myMethod').yieldsTo('beforeSend', {}).callsArg(1);

我究竟做错了什么?

javascript unit-testing mocha sinon chai
1个回答
0
投票

不可能为这样的函数调用链接两个不同的行为,所以.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!
});
© www.soinside.com 2019 - 2024. All rights reserved.