如何在 react-testing-library 中设置状态

How to setState in react-testing-library

概览:

问题:

无论是否使用测试库,使用 setState 都是危险的方法。

  1. 这取决于实施细节(例如,属性 状态内的名称)因此维护测试变得更加困难 - 更多测试需要更改,当应用程序正常时容易导致测试中断等。
  2. 一旦将 class 组件转换为带有挂钩的功能组件,就无法调用它。所以你更依赖于实现细节。
  3. 最后,直接状态操作可能会以您在现实世界中永远无法获得的状态结束。这意味着你的组件将被破坏,因为它不可能达到某种状态,但你的直接初始化测试会很好。

那么你最好做什么?提供道具、更改道具、调用道具(wrapper.find('button').filter(button => button.text() === 'Cancel').props().onClick() 用于酶,fireEvent.click(getByText(/Cancel/i)) 用于 RTL)并验证渲染的内容。

这样您的测试将更短、最实际并且在您更新被测组件后需要更少的更改。