酶模拟'点击'应该

时间:2017-10-18 16:09:16

标签: javascript jestjs enzyme

我使用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道具是正确的,那么这并不意味着点击事件没有正确调用道具吗?

1 个答案:

答案 0 :(得分:0)

不清楚两个.find是否选择相同的组件,因为每个组件使用不同的选择器。结合使用.first(),您无法使用示例代码确定订单。
您可以尝试使用更具体的选择器,避免使用.first()并使用.find获取所需的组件。为此,您可以为特定id添加ButtonSubmit,并使用如下选择器:
.find('ButtonSubmit[id="foo"]')