0

我需要重构所有酶单元测试以反应原生测试库。

在 Enzyme 中,要获得子元素的道具,我可以使用以下内容:

((rootElement.props() as Props).prop).toBe(value).

prop() 函数返回包装器当前节点的 props 哈希。注意:只能在单个节点的包装器上调用。

我怎样才能在反应原生测试库中做同样的事情?

我应该只将完整路径传递给道具吗?像这样:

expect(nextUpNoThanksButton[0].props.children.props.isSelected).toEqual(true);

还是有其他方法可以做到这一点?

4

1 回答 1

0

React 测试库的基本原则是测试组件是否接收到道具或对道具、状态等进行任何类型的断言。

因此,在这种情况下,我认为不可能在 RTL 中做你需要的事情。

这种意识形态在编写更好的单元测试方面大有帮助。

虽然酶提供了这些选项,并且在某些情况下,它们很有帮助,但可以说它为做出不正确的断言提供了一种方式,并最终超越了单元测试的目的。

验证通过一些道具后会发生什么。也就是说,DOM 上发生了什么。因为最终,这才是最重要的,你是在从最终用户的角度断言现实世界中发生的事情。这就是 RTL 提倡的重点。

你总是可以做类似的事情,

  • 断言是否调用了函数。将函数回调作为 prop 传递,然后您可以验证它是否被调用。
  • 断言发生了其他一些动作,这是传递特定道具的效果。
  • 断言在 DOM 上显示或不显示的东西作为道具的效果。

我们经历了相同的过程,整个单元测试套件都是使用 Enzyme 构建的。我们最终决定转向 RTL,大致就是我们遵循的方法,

  • 任何正在编写的新单元测试都应该使用 RTL。没有例外。
  • 任何使用 Enzyme 的现有单元测试都可以保留。他们仍然会跑步并做他们的工作。
  • 每隔一段时间,作为一般代码更改的一部分,我们会尝试选择基于酶的单元测试并进行转换。根据复杂性,此练习可能需要时间。但是您可以从容易获得的成果开始,逐步发展到更复杂的成果,并有条不紊地将它们转换为使用 RTL。

希望这可以帮助。

于 2021-09-03T19:23:29.163 回答