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

如何使用Jest spyOn对需传参的useGetTableData Hook进行模拟?

Jest 模拟带参数自定义 Hook 的 spyOn 用法

背景

之前用 Jest 的 spyOn 模拟无参数自定义 Hook 一直正常,代码如下:

jest.spyOn(Hooks, "useGetTableData").mockImplementation({ refetch: jest.fn() });

但现在目标 Hook useGetTableData 需要接收字符串参数,组件中的调用方式为:

const type = `typeOfTable`
const { refetch } = useGetTableData(type);

解决方案

核心要点

mockImplementation 支持传入函数替代直接传对象,这个函数可以接收 Hook 被调用时传入的所有参数,你可以根据需求处理参数并返回模拟结果。

具体实现

1. 通用模拟(不区分参数)

如果不需要针对特定参数做处理,直接返回固定模拟对象:

jest.spyOn(Hooks, "useGetTableData").mockImplementation(() => ({
  refetch: jest.fn()
}));

2. 针对指定参数的模拟

如果需要仅对特定参数(比如 typeOfTable)返回模拟值,可以在函数内判断参数:

jest.spyOn(Hooks, "useGetTableData").mockImplementation((param) => {
  if (param === 'typeOfTable') {
    return { refetch: jest.fn() };
  }
  // 其他参数场景可按需处理,比如返回空对象或调用原Hook
  return {};
});

3. 验证参数传递正确性

若要确认组件调用 Hook 时传入了预期参数,可使用 Jest 的断言方法:

// 组件渲染完成后执行断言
expect(Hooks.useGetTableData).toHaveBeenCalledWith('typeOfTable');

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 04:52:35