我使用Jest和Enzyme来测试Form组件,但我无法使点击模拟工作。供参考:Button
是一个样式化的rebass按钮,它的形式如下:
<Button
type="reset"
disabled={pristine || submitting}
onClick={() => onClose(dirty)}
>
这是测试失败的原因:
it('should handle the onClose event', () => {
const onCloseSpy = jest.fn();
const renderedComponent = mount(renderFormUtil({ onClose: onCloseSpy }));
expect(onCloseSpy).not.toHaveBeenCalled();
console.log(renderedComponent.find(Form).props().onClose);
renderedComponent
.find(Button)
.first()
.simulate('click');
expect(onCloseSpy).toHaveBeenCalled();
});
这里应该注意的是,如果我用以下内容替换模拟线:
renderedComponent
.find(Button)
.first()
.props()
.onClick();
然后突然我的测试通过了。这怎么可能?如果onClick道具是正确的,那么这并不意味着点击事件没有正确调用道具吗?
答案 0 :(得分:0)
不清楚两个.find
是否选择相同的组件,因为每个组件使用不同的选择器。结合使用.first()
,您无法使用示例代码确定订单。
您可以尝试使用更具体的选择器,避免使用.first()
并使用.find
获取所需的组件。为此,您可以为特定id
添加ButtonSubmit
,并使用如下选择器:
.find('ButtonSubmit[id="foo"]')