React 测试库的基本原则是不测试组件是否接收到道具或对道具、状态等进行任何类型的断言。
因此,在这种情况下,我认为不可能在 RTL 中做你需要的事情。
这种意识形态在编写更好的单元测试方面大有帮助。
虽然酶提供了这些选项,并且在某些情况下,它们很有帮助,但可以说它为做出不正确的断言提供了一种方式,并最终超越了单元测试的目的。
验证通过一些道具后会发生什么。也就是说,DOM 上发生了什么。因为最终,这才是最重要的,你是在从最终用户的角度断言现实世界中发生的事情。这就是 RTL 提倡的重点。
你总是可以做类似的事情,
- 断言是否调用了函数。将函数回调作为 prop 传递,然后您可以验证它是否被调用。
- 断言发生了其他一些动作,这是传递特定道具的效果。
- 断言在 DOM 上显示或不显示的东西作为道具的效果。
我们经历了相同的过程,整个单元测试套件都是使用 Enzyme 构建的。我们最终决定转向 RTL,大致就是我们遵循的方法,
- 任何正在编写的新单元测试都应该使用 RTL。没有例外。
- 任何使用 Enzyme 的现有单元测试都可以保留。他们仍然会跑步并做他们的工作。
- 每隔一段时间,作为一般代码更改的一部分,我们会尝试选择基于酶的单元测试并进行转换。根据复杂性,此练习可能需要时间。但是您可以从容易获得的成果开始,逐步发展到更复杂的成果,并有条不紊地将它们转换为使用 RTL。
希望这可以帮助。