如何在反应测试库中设置状态

Huy*_* Ho 8 setstate react-testing-library

概述:

  • 之前用 Enzyme 测试我重构过脚本测试,现在想用@testing-library/react

问题:

  • 我在@testing-library/react 中找不到 setState 的解决方案

sky*_*yer 7

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

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

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

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

  • 这并不能回答问题。如果我需要根据等待 API 返回或承诺从其他库解析来设置状态,该怎么办?仅使用我需要的详细信息设置状态比构建我正在调用的整个库的深度模拟更容易。或者,如果有一种方法可以在组件上设置状态的话。 (5认同)
  • 这是一个很好的理想,但不太实用。如果按钮不在该组件中怎么办?我们应该单击其他组件按钮吗?这也很脆弱,并且破坏了测试该单元的想法。 (4认同)