为解释这个问题,这是我的代码的简化版本。
<div class="button-wrapper">
<button type="submit"><span>Apply</span></button>
<button type="submit"><span>Reset</span></button>
</div>
我一直在尝试单击上面div
中的第一个按钮。
所以,我写了如下代码。
it('should prevent submitting xxx', () => {
const wrapper = shallow(<Component { ...baseProps } />);
console.log(wrapper.find('.button-wrapper'));
// it prints ShallowWrapper { length: 1 }
console.log(wrapper.find('.button-wrapper > button').at(0));
// it prints "ShallowWrapper { length: 1 }" as well
wrapper.find('.button-wrapper').simulate('click');
// it doesn't throw any error
wrapper.find('.button-wrapper > button').at(0).simulate('click');
// it results in an error, saying "Cannot read property of 'props' of undefined"
expect(baseProps.updateX).not.toHaveBeenCalled();
});
可以使用wrapper.find()找到.button-wrapper
div元素,并将其视为ShallowWrapper
。
第一个button
也是如此。
不过,当我将.simulate('click')
放到按钮上时,会导致"Cannot read property of 'props' of undefined"
错误。
用.at(0)
替换first()
不会改变结果。
您是否看到此错误的任何可能原因?任何建议将不胜感激。