mock = sinon.mock();
mock.exactly(2);
mock.callsArgWith(1, m1);
mock.callsArgWith(1, m2);
在我的测试中,m2覆盖了m1。我想在第一个电话中返回m1,在第二个电话中返回m2。
该怎么做?
答案 0 :(得分:1)
您可以使用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
});