使用[event.target.name]的React组件Jest测试不通过如何解决?
问题原因
你的测试代码在模拟change事件时,仅给target对象传入了value属性,没有传入和DOM元素匹配的name属性。
你的handleChange方法使用[event.target.name]作为动态键更新state,当event.target.name不存在时,计算得到的键为undefined,不会命中state.comment字段,也就无法正确更新textarea绑定的值,因此测试不通过。
解决方案
只需要修改测试代码,在模拟change事件时补充传入name属性,值和textarea标签上的name属性(comment)保持一致即可,不需要修改原有组件的逻辑:
it('has a text area where the users can type in', () => { wrapped.find('textarea').simulate('change', { target: { name: 'comment', value: 'new comment' } }) wrapped.update() expect(wrapped.find('textarea').prop('value')).toEqual('new comment') })
补充说明
后续如果组件新增其他表单控件需要复用同一个handleChange方法做动态state更新,只需要在对应测试的模拟事件中传入和表单元素name属性匹配的值,就可以正常完成测试,不用调整handleChange的业务代码。
内容的提问来源于stack exchange,提问作者mouchin777
相关产品推荐
相关产品推荐

