简单地说我想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
这对我来说没有多大意义。请帮助我找到解决方案,或者至少澄清正在发生的事情
1条答案
按热度按时间rkue9o1l1#
您无法使用
jest
和testing-library
捕获和Assert源自事件处理程序的错误。你可以从
jest
中使用expect.toThrow
来Assert一个函数或一个Reactrender
所抛出的错误,但遗憾的是这不是你想要的。jest
无法捕获事件处理程序中出现的错误,因为这些错误发生在主执行的单独线程中,因此它们不会传播回您的测试(这里可能没有使用正确的术语,但希望您能理解)。出于同样的原因,ReactErrorBoundary
无法捕获和处理这类错误。我所能建议的是在处理程序中捕获并记录错误,然后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