酶,ReactTestUtils和react-testing-library之间的区别

时间:2019-01-11 19:04:22

标签: reactjs enzyme react-testing-library

用于反应测试的酶,ReactTestUtils和react-testing-library之间有什么区别?

ReactTestUtils文档说:

  

ReactTestUtils使在测试中轻松测试React组件变得容易   您选择的框架。

酶文献只说:

  

Enzyme是一种用于React的JavaScript测试实用程序,使它更容易   声明,操纵和遍历React组件的输出。

反应测试库文档:

  

react-testing-library是一种非常轻巧的测试解决方案   反应组件。它在顶部提供轻实用程序功能   反应域。

为什么实际上每个解决方案都更容易,而另一个解决方案却无法实现?

2 个答案:

答案 0 :(得分:7)

ReactTestUtils为您提供了测试React组件的最低要求。我还没有看到它被用于大型应用程序。

酶和反应测试库都是很好的库,它们为您提供了测试应用程序所需的所有工具。他们有两种不同的哲学。

酶允许您访问组件的内部工作原理。您可以读取并设置状态,还可以模拟子级以使测试运行更快。

另一方面,react-testing-library不允许您访问实现细节。它呈现了组件并提供了与之交互的实用方法。这个想法是,您应该以与用户相同的方式与应用程序通信。因此,与其重设组件的状态,不如重现用户为达到该状态所要做的动作。

以我的经验,酶更容易掌握,但从长远来看,它很难维护。 react-testing-library迫使您编写平均而言更为复杂的测试,但它使您对代码有更高的信心。

答案 1 :(得分:5)

旨在用于单元/集成测试。其API旨在测试实现。它提供了不需要DOM(用于浅层渲染)的自定义渲染器,其行为与React渲染器不同,并允许进行对于单元测试很重要但默认渲染器无法实现或简单的事情,例如同步状态更新,浅层渲染,禁用生命周期方法等。

react-testing-library 用于黑盒集成/ e2e测试。它内部使用React渲染器和ReactTestUtils,需要真实的DOM,因为它是在测试中而不是内部声明的组件输出。它不提供隔离单元测试的功能,但是可以通过模拟包含需要通过其他方式(特别是jest.mock进行间谍,模拟或存根的组件的模块)来实现。

react-dom / test-utils react-test-renderer 包含功能的子集,并在其上构建了酶和反应测试库。 API稀缺,并且需要编写样板代码或自定义实用程序功能来进行全面的测试。反应officially promotes酶和反应测试库是更好的选择。