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

如何多次模拟自定义外部Hook库?以jest模拟useReactiveVar为例

解决方法

要在不同测试用例里让useReactiveVar返回不同的bool值,你得把它改成可动态调整的jest模拟函数,而不是写死固定返回值。具体操作如下:

  1. 先修改全局mock的定义,把useReactiveVar设为jest.fn()并给初始返回值:
jest.mock("@apollo/client", () => ({
  ...jest.requireActual("@apollo/client"),
  // 定义成jest模拟函数,默认返回bool: false
  useReactiveVar: jest.fn(() => ({ ...data, bool: false })),
}))
  1. 在测试文件顶部引入这个模拟的useReactiveVar:
import { useReactiveVar } from "@apollo/client";
  1. 然后在各个测试用例里按需修改返回值:
test("测试用例1:bool为false", () => {
  // 可以用默认值,也可以显式设置
  useReactiveVar.mockReturnValue({ ...data, bool: false });
  // 这里写你的测试逻辑
});

test("测试用例2:bool为true", () => {
  // 覆盖返回值,让bool变成true
  useReactiveVar.mockReturnValue({ ...data, bool: true });
  // 这里写你的测试逻辑
});

为啥之前的尝试没成功?

如果之前你单独定义了useReactiveVarMock但没生效,大概率是没把这个mock函数和@apollo/client模块里的useReactiveVar关联起来。上面的写法直接在jest.mock里把useReactiveVar定义成jest.fn(),再通过模块引入拿到这个函数,就能保证在测试用例里能正常修改它的返回值。

另外要注意,如果data是外部变量,得确保它在测试用例里能访问到,或者根据需求调整返回的对象结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 08:23:18