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

升级React Hook Form V7后测试出现TypeError:无法解构register的ref

React Hook Form V7 升级后测试用例修复方案

问题原因

React Hook Form V7 中,register 函数调用后会返回包含 ref、name、onChange 等属性的对象,你之前仅用 jest.fn() 模拟 register,它默认返回 undefined,导致解构 ref 时抛出类型错误。

修复方案

方案1:模拟符合V7规范的register函数(组件接收register作为props时)

测试时传入一个能返回正确结构对象的模拟函数:

// 模拟register函数,调用后返回包含ref及必要属性的对象
const mockRegister = jest.fn((fieldName) => ({
  ref: jest.fn(), // 可根据测试需求调整为真实DOM节点或空函数
  name: fieldName,
  onChange: jest.fn(),
  onBlur: jest.fn()
}));

// 渲染组件时传入该mock
render(<YourComponent register={mockRegister} />);

方案2:Mock整个useForm钩子(组件内部调用useForm时)

直接 mock react-hook-form 库的 useForm 方法,确保返回的 register 符合V7结构:

jest.mock('react-hook-form', () => ({
  useForm: () => ({
    register: jest.fn((fieldName) => ({
      ref: jest.fn(),
      name: fieldName,
      onChange: jest.fn(),
      onBlur: jest.fn()
    })),
    // 若组件用到handleSubmit等其他方法,需在此添加对应模拟
    handleSubmit: jest.fn((callback) => callback)
  })
}));

额外验证

可通过断言确认 register 被正确调用:

expect(mockRegister).toHaveBeenCalledWith('test');

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 12:06:29