模拟父组件测试文件中的子组件元素单击

时间:2019-11-09 00:07:24

标签: javascript reactjs jestjs enzyme react-testing-library

我找不到一种方法来模拟父级测试文件中子组件中存在的元素的点击。

let card;

const displayCardSection = (cardName) => {
  card = cardName;
};

describe('Parent component', () => {
  it('simulate click event on child link', () => {
    const component = mount(<Parent
    />);
    const res = component.find(<Child
        onLinkClick={displayCardSection(CM_CARD)}
    />);
    expect(res).toBeDefined();
    res.exists('#cm_link').simulate('click');
    expect(card).toBe(CM_CARD);
  })
})

这是父组件的测试文件。

Parent.jsx:

class Parent extends Component {

  handleClick = () => {
    console.log('link clicked!');
  };

  render() {

    const linkText = 'Link'
    return (
      <Child 
        linkText={linkText}
        onLinkClick={handleClick}
      />
    );
  }
}

Child.jsx:

function Child({linkText, onLinkClick}) {
  return (
    <Link id="cm_link" onClick={onLinkClick}>{linkText}</Link>
    );
}

这些是我拥有的组件。

我希望模拟父组件中子组件的链接单击,并且输出应该是显示的卡为'CM_CARD'。我可以写一个assert语句,但是我不能模拟存在于子元素中但由父元素本身处理的元素的click事件。

1 个答案:

答案 0 :(得分:0)

首先,我建议使用shallow,其代码如下:

const component = shallow(<Parent />);

// The following code should trigger the handler and then you will see the console output 
component.find("Child").prop("onLinkClick")();

我希望这是有用的,它将解决您的问题,祝您有美好的一天!