Reactjs 酶、reactestutils和react测试库的区别

Reactjs 酶、reactestutils和react测试库的区别,reactjs,enzyme,react-testing-library,Reactjs,Enzyme,React Testing Library,酶、reactestutils和react测试库之间的区别是什么 ReactTestUtils文档说明: ReactTestUtils使得在测试中测试React组件变得很容易 您选择的框架 酶文档只是说: Ezyme是React的JavaScript测试实用程序,使其更简单 断言、操作和遍历React组件的输出 React测试库文档: react测试库是一个非常轻量级的测试解决方案 反应组分。它提供了灯光实用功能的顶部 做出反应 为什么实际上每个解决方案都比较容易,而另一个解决方案又不能实现什么

酶、reactestutils和react测试库之间的区别是什么

ReactTestUtils文档说明:

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

酶文档只是说:

Ezyme是React的JavaScript测试实用程序,使其更简单 断言、操作和遍历React组件的输出

React测试库文档:

react测试库是一个非常轻量级的测试解决方案 反应组分。它提供了灯光实用功能的顶部 做出反应


为什么实际上每个解决方案都比较容易,而另一个解决方案又不能实现什么呢?

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

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

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

另一方面,react测试库不允许您访问任何实现细节。它呈现组件并提供与它们交互的实用方法。其思想是,您应该以与用户相同的方式与应用程序通信。因此,与其设置组件的状态,不如重现用户为达到该状态所做的操作


根据我的经验,酶更容易掌握,但从长远来看,它更难维持。react测试库迫使您编写平均来说稍微复杂一点的测试,但它会让您对代码有更高的信心。

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

反应测试库用于黑盒集成/e2e测试。它在内部使用React渲染器和ReactTestUtils,需要真正的DOM,因为它是在测试中断言的组件输出,而不是内部。它不为独立的单元测试提供工具,但可以通过模拟模块来实现这一点,这些模块包含需要通过其他方式(特别是
jest.mock
进行监视、模拟或存根的组件


react-dom/test-utilsreact-test-renderer包含功能子集,酶和react测试库是基于它们构建的。API很稀少,需要编写样板代码或定制实用程序函数来进行完整的测试。反应酶和反应测试库是更好的选择。

它是,不是反应utils,不是吗?@estus是的,你是对的。我已经编辑了这个问题。一个重要的澄清是酶和react测试库是在reactestutils之上构建的定制实用程序。这方面非常有用:)从2021年起,React现在建议只使用React测试库(),所以“jest”仅用于模拟目的?@vikramvi用于模拟、断言和运行测试。。。Jest是测试框架,这是它的目的。关于提到的
jest.mock
,Ezyme为模拟组件提供了额外的功能,这应该在使用RTL时通过jest实现。