如何使用jest和testing-library/react捕获这样的错误

cgvd09ve  于 2022-12-08  发布在  Jest
关注(0)|答案(1)|浏览(257)

简单地说我想Assert点击这个按钮而没有onClick prop将导致一个错误(我知道这是一个愚蠢的情况,但这只是一个粗略的简化)。但不幸的是,我不能捕捉这个错误,无论我如何尝试。

伪代码如下所示:

  • 元素.js:*
const Element = ({ onClick }) => (
<button onClick={() => onClick('test')}>Test</button>)
);
  • 元素.test.js*
it('triggers on click callback', () => {
    const wrapper = render(<Element />);

    expect(userEvent.click(wrapper.getByTestId('test'))).toThrowError();
  });

我收到3个控制台。错误语句:“控制台。错误错误:未捕获[类型错误:onClick不是函数]”

expect(received).toThrowError()
    Received function did not throw

这对我来说没有多大意义。请帮助我找到解决方案,或者至少澄清正在发生的事情

rkue9o1l

rkue9o1l1#

您无法使用jesttesting-library捕获和Assert源自事件处理程序的错误。
你可以从jest中使用expect.toThrow来Assert一个函数或一个React render所抛出的错误,但遗憾的是这不是你想要的。
jest无法捕获事件处理程序中出现的错误,因为这些错误发生在主执行的单独线程中,因此它们不会传播回您的测试(这里可能没有使用正确的术语,但希望您能理解)。出于同样的原因,React ErrorBoundary无法捕获和处理这类错误。
我所能建议的是在处理程序中捕获并记录错误,然后Assert在测试中使用spy调用了.log()
以下是一些关于此主题的讨论/文档,您可能会发现它们很有用:
https://github.com/testing-library/react-testing-library/issues/1068
https://github.com/testing-library/react-testing-library/issues/624
https://reactjs.org/docs/error-boundaries.html

相关问题