You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Sinon伪造函数时如何实现每次调用返回不同异步结果

Sinon 多次调用返回不同异步结果的解决方案

Sinon 本身已原生支持按调用顺序返回不同值,无需额外封装工具函数,推荐以下两种实现方案:

方案1:使用内置 onCall() 方法链式定义

通过 Fake 对象的 onCall(n) 方法指定第 N 次调用的返回规则,调用索引从 0 开始计数:

const sinon = require('sinon');
const targetFake = sinon.fake();
// 依次定义三次调用的异步返回值
targetFake.onCall(0).resolves(result1);
targetFake.onCall(1).resolves(result2);
targetFake.onCall(2).resolves(result3);
// 可选:定义超出三次后的默认返回值,不设置则后续调用返回 undefined
targetFake.resolves(defaultResult);

执行后三次调用的返回结果会严格按照定义的顺序返回,完全匹配你需要的 resolvesEach 效果。

方案2:自定义队列逻辑实现

如果需要动态调整返回队列、或者有更复杂的返回规则,可以自己封装带队列的 Fake 函数:

const resultQueue = [result1, result2, result3];
const targetFake = sinon.fake(async () => {
  // 按顺序取出队列头部值返回,队列空后可自定义兜底逻辑
  return resultQueue.shift() ?? 'default value';
});

配套验证方式

测试结束后可以通过 Sinon 断言验证调用符合预期:

// 验证总调用次数为 3
sinon.assert.callCount(targetFake, 3);
// 验证对应次数调用的传入参数符合预期
sinon.assert.calledWith(targetFake.secondCall, expectedParam);

内容的提问来源于stack exchange,提问作者czlowiek488

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 10:36:05