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

Sinon中uploadStub.callsArg(2).returns({})在Jest中的等效写法?

Jest 替代 Sinon callsArg(2).returns({}) 的写法

基础等效实现

要完全对应 Sinon 中 uploadStub.callsArg(2).returns({}) 的行为(调用第三个参数的回调,同时存根函数本身返回空对象),Jest 可以这样写:

// 创建 Upload 的存根
const uploadStub = jest.fn((req, res, callback) => {
  // 调用传入的第三个参数(异步回调)
  callback();
  // 对应 Sinon 的 returns({}),让存根返回空对象
  return {};
});

如果需要给回调传参(比如模拟无错误的成功场景),可以修改为:

const uploadStub = jest.fn((req, res, callback) => {
  // 传入 error 为 null,模拟成功回调
  callback(null);
  return {};
});

生成 Mock 回调并断言

如果需要将第三个参数的回调设为 Jest Mock 函数,方便后续断言调用情况(比如是否被调用、传入参数等),按以下步骤操作:

  1. 定义 Mock 回调函数:
// 创建 Jest Mock 回调,可自定义返回值或逻辑
const mockCallback = jest.fn(async () => {
  return 'mock return value';
});
  1. 调用 Upload 时传入这个 Mock 回调:
// 调用被存根的 Upload,传入 req、res 和 Mock 回调
uploadStub(req, res, mockCallback);
  1. 断言回调的调用情况:
// 断言回调被调用过一次
expect(mockCallback).toHaveBeenCalledTimes(1);
// 断言回调被传入了预期参数(比如 error 为 null)
expect(mockCallback).toHaveBeenCalledWith(null);
// 断言异步回调的返回结果
expect(await mockCallback()).toBe('mock return value');

异步回调的处理

因为原回调是 async function,如果需要等待回调执行完成,将存根改为异步函数即可:

const uploadStub = jest.fn(async (req, res, callback) => {
  // 等待异步回调执行完成
  await callback(null);
  return {};
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 07:40:13