使用Jest Mock AntD Form.useForm报错的原因及修复方法
错误原因
- Mock结构错误:你在Mock Form对象时,错误地将
originalModule.useForm(这是一个函数)展开到了Form对象中,而正确操作应该是继承originalModule.Form的原有属性。这种错误的展开导致Form对象丢失了AntD Form组件原本的核心结构(比如Form.Item、Form.List等必要属性),进而在测试运行时触发了设置name属性到undefined对象的错误。 - 变量赋值冗余:你把
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
相关产品推荐
相关产品推荐

