Как заставить sinon mock возвращать разные объекты по разным вызовам? - PullRequest
0 голосов
/ 26 февраля 2019
 mock = sinon.mock();
 mock.exactly(2);
 mock.callsArgWith(1, m1);
 mock.callsArgWith(1, m2);

Здесь, в моем тесте, m2 перекрывает m1.Я хочу вернуть m1 при первом вызове и m2 при втором вызове.

Как это сделать?

1 Ответ

0 голосов
/ 26 февраля 2019

Вы можете использовать onCall(n) (или псевдонимы onFirstCall, onSecondCall и onThirdCall)определить поведение при вызове nth :

import * as sinon from 'sinon';

test('mock returns different objects on different calls', () => {
  const m1 = { id: 1 }
  const m2 = { id: 2 }

  const mock = sinon.mock();
  mock.exactly(2);
  mock
    .onFirstCall().callsArgWith(1, m1)    // first call calls its second arg with m1
    .onSecondCall().callsArgWith(1, m2);  // second call calls its second arg with m2

  const spy = sinon.spy();
  mock('arg0', spy);  // spy should be called with m1
  mock('arg0', spy);  // spy should be called with m2

  sinon.assert.calledWithExactly(spy.getCall(0), m1);  // SUCCESS
  sinon.assert.calledWithExactly(spy.getCall(1), m2);  // SUCCESS
  mock.verify();  // SUCCESS
});
...