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

React Typescript测试中如何创建符合React.FormEvent<HTMLFormElement>类型的事件

错误原因

你触发onSubmit时传入的模拟事件对象只包含了不完整的属性,且存在方法名拼写错误,不符合TypeScript要求的React.FormEvent类型定义,因此触发了类型报错。

注:你的代码里将preventDefault误写为preventDefualt,需要先修正拼写问题。

解决方案

这里提供3种常用的处理方式,你可以根据自己的测试场景选择:

方案1:使用类型断言(最简便,适合单测场景)

如果你不需要在测试中用到事件的其他属性,可以直接用类型断言告诉TypeScript该对象符合FormEvent类型要求:

wrapper.find( 'form' ).prop( 'onSubmit' )({
    preventDefault(){},
} as unknown as React.FormEvent<HTMLFormElement>);

方案2:补全事件必填属性(无断言,类型更安全)

如果不想使用类型断言,可以补全FormEvent要求的最小属性集:

const mockFormEvent = {
  preventDefault: jest.fn(), // 用Jest mock的话还可以后续断言方法调用情况
  nativeEvent: {},
  currentTarget: document.createElement('form'),
  target: document.createElement('form'),
  bubbles: false,
  cancelable: false,
  isDefaultPrevented: () => false,
  stopPropagation: () => {},
  isPropagationStopped: () => false,
  persist: () => {},
} as React.FormEvent<HTMLFormElement>;

wrapper.find('form').prop('onSubmit')(mockFormEvent);

// 后续可以加断言,比如:
// expect(mockFormEvent.preventDefault).toHaveBeenCalledTimes(1);

方案3:使用Enzyme的simulate方法(更符合Enzyme测试规范)

你在处理input的change事件时已经用到了simulate方法,submit事件也可以用同样的写法,Enzyme会自动处理事件类型匹配,不需要手动构造完整事件对象:

wrapper.find('form').simulate('submit', {
  preventDefault: () => {}
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 02:54:08