我正在用 React 构建一个应用程序。我在<input type="file"/>
react引导程序“后面”隐藏了一个文件输入元素 ( ) Button
,以便能够控制样式。因此,当单击按钮时,我转身并在文本输入元素上触发合成单击事件,如下所示。
class OpenFileButton extends React.Component {
...
clickHandler() {
this.refs['input'].click();
}
render() {
return (
<ButtonGroup>
<div>
<input type="file" onChange={this.props.someCallback}
ref="input" style={{display: 'none'}}/>
<Button onClick={this.clickHandler}>Open File</Button>
</div>
</ButtonGroup>
);
}
}
我希望能够用 Jest/Enzyme 测试这个。但是,虽然我可以模拟按钮上的点击事件,但我还没有弄清楚如何检测文件输入元素上的合成点击事件。
我曾尝试使用 Jest/Enzyme 来模拟输入元素上的点击方法。
const component = mount(<OpenFileButton/>);
const fileInput = component.find('input');
const button = component.find('Button');
fileInput.click = jest.fn();
button.simulate('click');
expect(fileInput.click).toHaveBeenCalled();
但是,以click
这种方式嘲笑该方法不起作用。我也无法添加onClick
属性,即fileInput.props().onClick = jest.fn()
不起作用。
这个问题是关于在代码本身中检测合成点击事件,而不是在测试代码中,因此不相关。
那么,如何使用 Jest/Enzyme 检测 DOM 元素上的(合成)单击事件?