Есть ли способ заглушить метод с помощью sinon, где метод имеет два аргумента - PullRequest
2 голосов
/ 18 марта 2019

Позвольте мне объяснить формулировку проблемы:

Я использую мокко, чай и синон. Я пытаюсь заглушить метод, который выглядит примерно так:

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

Я хочу заглушить myMethod и позвонить beforeSend, а также callback. Я не могу найти решение, которое работает. Я пробовал следующее, но это не работает:

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

Что я делаю не так?

1 Ответ

0 голосов
/ 18 марта 2019

Невозможно связать два разных поведения для одного и того же вызова функции , как это так, .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!
});
...