如何使用 onClick 函数测试 React 组件 Jest/React 测试库

How to test react component with onClick function Jest/React testing library

我试图在其中一个测试中达到 100% 的覆盖率,它突出显示了设置组件状态的 onClick 函数:这是组件:

我有一个按钮,它具有如下所示的 onClick 功能,该按钮是从对象数组映射进来的。

  const [activeIdx, setActiveIdx] = React.useState(0);

  <button type="button" data-testid={'btn-test} 
     onClick={() => {setActiveIdx(() => index); inner.cb(index)}}key={inner.id}>
     {inner.title}</button>

此按钮单击并设置单击按钮的活动索引,因为这是一个按钮组。我将如何测试 jest/react-testing 库中的 onClick 函数?

我有一些测试会检查一些事情,例如:

    it('Should render without crashing', (): void => {
        const div = document.createElement("div");
        ReactDOM.render(<ButtonGroup data={Data}/>, div);
        ReactDOM.unmountComponentAtNode(div);
    });

    const btn = screen.getByRole('button', {name: '1 hour'});

    it('Should be clicked', (): void => {
       fireEvent.click(btn);
       expect(btn).toBeValid();
    });

但是如何模拟函数并检查呢?

您可以使用 Enzyme 模拟点击,这里有一篇关于它的博客 https://preactjs.com/guide/v10/unit-testing-with-enzyme/

wrapper.find('btn').simulate('click');

这实际上是 goes against the core idea of testing library 其中

Testing Library encourages you to avoid testing implementation details like the internals of a component

您可以尝试两种解决方案:

  1. 根据状态变化创建视觉响应,然后检查该视觉响应
  2. 导出您在 onClick 中使用的函数,然后在测试中 you can mock that function 查看它是否被调用,返回了什么,等等