【问题标题】:Fake return value of function call, each call with different data函数调用的假返回值,每次调用都有不同的数据
【发布时间】:2021-11-20 17:22:33
【问题描述】:
我有想用 sinon 伪造的函数。我使用 DI 注入伪造的函数。
通常我会
fake.resolves(result) 但我无法在测试期间更改解析值。
我执行了三次函数,每次都期望不同的结果。我想做类似这里fake.resolvesEach([result1, result2, result3])的事情。
我可以用什么来解决我的问题?
【问题讨论】:
标签:
node.js
typescript
dependency-injection
sinon
【解决方案1】:
你应该使用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/中的文档