检查Sinon stubbed方法中的第n个调用

时间:2017-08-22 06:02:10

标签: node.js mocha sinon

假设我有一个辅助方法helper.someFn和服务方法servMethod多次调用helper.someFn。现在,在测试servMethod时,我发现了helper.someFn

// helper.js
exports.someFn = (param) => {
    return param + 1;
}


// service.spec.js
describe('Spec', () => {
    it('first test', (done) => {
        var someFnStub = sinon.stub(helper, 'someFn', (param) => {
            return 0;
        });
        // do servMethod call which calls someFn
        expect(someFnStub.firstCall.calledWith(5)).to.be.true;

        helper.someFn.restore();
        done();
    });
});

让我们说servMethod每次使用不同的参数调用helper.someFn 5次。在内部测试中,我可以使用helper.someFn访问someFnStub.firstCall的第一个电话。我可以通过这种方式访问​​,直到第三次通话。如何访问第4或第5个电话等下一个电话?

3 个答案:

答案 0 :(得分:3)

stub.onFirstCall()stub.onCall(0)的缩写,stub.onSecondCall()stub.onCall(1)的缩写,等等,所以如果你想测试第四个电话:

expect(someFnStub.onCall(3).calledWith(5)).to.be.true;

此处记录:http://sinonjs.org/releases/v3.2.1/stubs/#stub-onCall

答案 1 :(得分:0)

源代码显示Failed to deploy artifacts: Could not transfer artifact a.b:deploy-to-nexus:pom:1.0 from/to ..... (http://.....-releases): Failed to transfer file http://..../deploy-to-nexus/1.0/deploy-to-nexus-1.0.pom with status code 400 firstCallsecondCall实际上只是thirdCall上的糖。

getCall

因此,要在第四次通话中断言,您将使用// lib/sinon/spy.js // ... this.firstCall = this.getCall(0); this.secondCall = this.getCall(1); this.thirdCall = this.getCall(2); this.lastCall = this.getCall(this.callCount - 1); // ...

答案 2 :(得分:0)

getCall(-nth) 其中 nth 可以是负值。

这允许获取从数组末尾索引的调用:

spy.getCall(-1) // returns the last call
spy.getCall(-2) // the second to last call.
// ...

文档:https://sinonjs.org/releases/latest/spies/