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

simulate方法第二个参数应传什么?适配接收自定义对象的onChange

嘿,我来帮你解决这个问题!

问题出在:你的myChangeFunction接收的是自定义的myObject对象,但simulate方法默认会把你传入的参数包装成标准的React合成事件对象,所以之前的两种写法都没匹配上函数的参数要求。

给你两种可行的解决办法:

方法1:直接调用组件的onChange属性(最直接)

如果不需要模拟事件冒泡这类复杂行为,直接拿到组件实例后调用它的onChange prop就行,完全不用simulate:

const component = mount(<YourCustomComponent onChange={myChangeFunction} />);
const updates = { firstname: "john", lastname: "doe" };
// 直接传入自定义对象
component.props().onChange(updates);

方法2:调整simulate的参数,让组件能正确提取自定义对象

如果你的组件内部是通过事件的某个属性来传递自定义对象的(比如组件定义里是onChange={(event) => myChangeFunction(event.detail)}),那你可以把自定义对象放到事件的对应属性里:

const updates = { firstname: "john", lastname: "doe" };
// 把自定义对象放在事件的detail属性里(也可以是其他你定义的属性)
component.simulate("change", { detail: updates });

这种情况下,组件内部的onChange需要从事件对象中取出detail作为参数传给myChangeFunction。

顺便说下为什么之前的写法无效:

  • 第一种写法simulate("change", { target: updates }):此时myChangeFunction拿到的是一个包含target属性的事件对象,而不是你想要的myObject,类型不匹配。
  • 第二种写法simulate("change", updates):enzyme会自动把updates包装成合成事件对象,所以函数拿到的不是纯myObject,而是带有额外事件属性的对象,自然也无法正常工作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:29:13