Fake return 函数调用的值,每次调用不同的数据

Fake return value of function call, each call with different data

我有一个函数,我想用 sinon 来伪造。我使用 DI 注入伪函数。

通常我会 fake.resolves(result) 但我无法在测试期间更改已解析的值。

我执行了三次函数,每次都希望得到不同的结果。我想在这里 fake.resolvesEach([result1, result2, result3]).

做类似的事情

我可以用什么来解决我的问题?

你应该使用onCall(n)函数

示例 1:

const FetchStub = sinon
 .stub()
 .onCall(0)
 .resolves(serviceAccountAccessTokenRes)
 .onCall(1)
 .resolves(signJsonClaimRes)
 .onCall(2)
 .resolves(getTokenRes)
 .onCall(3)
 .resolves(makeIapPostRequestRes);
const sample = getSample(FetchStub);

示例 2:


describe("stub", function () {
    it("should behave differently on consecutive calls", function () {
        const callback = sinon.stub();
        callback.onCall(0).returns(1);
        callback.onCall(1).returns(2);
        callback.returns(3);

        assert.equals(callback(), 1); // Returns 1
        assert.equals(callback(), 2); // Returns 2
        assert.equals(callback(), 3); // All following calls return 3
    });
});

您可以阅读 https://sinonjs.org/releases/latest/stubs/

中的文档