reactjs - e.target 在反应组件事件处理程序的开玩笑单元测试中找不到,尽管将第二个参数传递给酶的 .simulate()
问题描述
所以我有一个选择下拉列表,用户可以在其中从省份列表中进行选择。
<select
className="province-select"
onChange={this.regionSelected}
>
<option>
Ontario
</option>
<option>
Quebec
</option>
</select>
在我的单元测试中,我想触发 on change 事件并检查 this.regionSelected 是否按预期调用
const wrapperSuccess = shallow(<RegionSelector {...validData} />);
wrapperSuccess.find(".province-select").simulate('change', { target: { value: 'Ontario' } });
我的 RegionSelector 组件在实际环境中运行和工作很有趣。但是,当我运行上面的单元测试时,出现以下错误:
无法读取未定义的属性“目标”
setCurrentRegion(e.target.value)
setCurrentRegion 是在更改处理函数 this.regionSelected 中调用 e.target.value 的第一行代码。我检查了酶的文档和其他几个堆栈溢出答案,他们都说要传入第二个事件对象。但我是!仍然没有找到 e.target 。我错过了什么?谢谢
解决方案
好的!弄清楚了。原因似乎是因为 eventHandler 是组件本身的方法。如果是通过 props 传入的 eventHandler 就好了。但是出于某种原因,使用 jest 的 shallow(),即使将第二个参数传递给模拟 () 函数,eventHandler 也不会收到它。我通过监视组件本身的原型来解决它,这似乎有效
推荐阅读
- elasticsearch - 将后端侦听器添加到 JMeter 5.3 时出错
- javascript - 持久性条件语句数据存储
- hyperledger-fabric - 未找到发现结果且背书失败
- python - 往返 pd.Series 的最佳方式
- javascript - HTML 元素在 chrome 检查模式下不可见
- laravel - Laravel GraphQL Lighthouse 单元测试突变返回错误“语法错误:意外
" - c# - T-SQL 中的 NEWID() 和 System.Guid.NewGuid() 会创建相同的键吗?
- c# - C#单元测试模拟服务忽略返回
- leaflet.markercluster - 渲染一个标记的 divIcon 而不是集群标记
- xpages - 更新 NotesDocument 不会更新绑定的 NotesXspDocument