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

使用Jest Mock AntD Form.useForm报错的原因及修复方法

错误原因
  1. Mock结构错误:你在Mock Form对象时,错误地将originalModule.useForm(这是一个函数)展开到了Form对象中,而正确操作应该是继承originalModule.Form的原有属性。这种错误的展开导致Form对象丢失了AntD Form组件原本的核心结构(比如Form.Item、Form.List等必要属性),进而在测试运行时触发了设置name属性到undefined对象的错误。
  2. 变量赋值冗余:你把jest.mock()的返回值赋值给了form变量,但jest.mock()本身并不返回mock实例,这个赋值完全没必要,反而可能造成混淆。
修复方案

修正Mock代码结构,保留AntD Form原有组件的同时,仅覆盖useForm方法:

jest.mock('antd', () => {
  const originalModule = jest.requireActual('antd');
  return {
    ...originalModule, // 保留antd其他所有模块的原有实现
    Form: {
      ...originalModule.Form, // 继承Form原有的所有属性(比如Form.Item、Form.List等)
      useForm: () => [{
        scrollToField: jest.fn(),
        getFieldInstance: jest.fn(),
        // 可根据测试需求添加更多需要mock的form方法,比如validateFields、resetFields等
      }]
    },
  };
});

关键修正点

  • 先展开originalModule,保留antd其他组件的正常功能,避免影响非Form相关的测试。
  • 展开originalModule.Form,确保Form的子组件(如Form.Item)能正常使用,不会因Mock丢失而报错。
  • 移除多余的const form =赋值,因为jest.mock()是全局生效的Mock,不需要接收返回值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 05:03:36