Jest和酶有啥区别?

Posted

技术标签:

【中文标题】Jest和酶有啥区别?【英文标题】:What is the difference between Jest and enzyme?Jest和酶有什么区别? 【发布时间】:2017-07-25 18:55:45 【问题描述】:

我是单元测试的新手。我想测试 React 项目。当我开始使用 React 文档时,将酶称为测试实用程序,这对我来说有点模棱两可。

Jestenzyme 有什么区别?

enzyme 断言库还是任务运行器? 我可以将karmaJasmine 一起使用吗? 测试react-redux 项目的最佳方法是什么?

【问题讨论】:

Jest 是一个具有运行器和断言的测试框架。 Enzyme 是一个用于操作和断言 React 组件的测试工具库,它适用于 Jest 或 Karma 或 Mocha 或其他测试框架。 Karma 和 Jasmine 将成为 Jest 的替代品。 【参考方案1】:

EnzymeJest 都有不同的职责“Enzyme”不是测试运行器,意思是当你输入命令npm testnpm run test 收集所有以.test.js 结尾的文件并运行每个测试用例并在控制台中显示通过和失败结果是开玩笑的责任,如下所示

Enzyme 为您提供捕捉 dom 元素并执行某些操作的功能,下面是它的一些功能

shallow, mount, find, children, etc...

您也可以使用 React 测试库(另一个流行的测试库)来实现此类功能来访问 dom 元素

EXTRA:开发者经常混淆

开玩笑 反应测试库 酶

这里 Enzymereact-testing-library 是两个相似的东西,并且可以相互替代使用

酶与玩笑或 react-testing-library with jest 您也可以使用全部三个,即 react-testing-library+Enzyme 和 jest 但你不能在没有 jest 或任何其他测试运行器的情况下使用 Enzyme 和 react-testing-library,例如:Mocha

其中 jest(testing-framework) 将收集所有 .test.js 文件,执行所有测试用例,并将输出放在控制台中,详细说明有多少通过和失败以及 react-testing-library 或酶(两者都是测试库) 将帮助您执行事件和访问 dom 元素

【讨论】:

【参考方案2】:

Jest 是一个包含任务运行器、断言库和模拟支持的框架。这意味着它可以执行不同的单元测试用例,将其结果写入控制台或日志文件,创建模拟或验证所有断言。简而言之,它将执行测试。

另一方面,

Enzyme 是一个为编写单元测试提供简单接口的库。为此,它封装了 React TestUtils、JSDOM 和 CheerIO 等包。 React TestUtils 具有将 React 组件渲染到文档中并模拟事件的方法。 JSDOM 是 DOM(文档对象模型)的 javascript 实现。 DOM 表示 UI 组件的树结构。 CheerIO 实现了 jQuery 核心的一个子集,用于查询 DOM。

Enzyme 不是测试运行器。它没有自己的断言库。它只是提供了一组用于单元测试的 API。这就是它可以与 Jest 或任何其他任务运行程序集成的原因。

是的,你可以在茉莉花上使用因果报应。

【讨论】:

【参考方案3】:

Aaron 的评论回答了您的第一个问题。

Enzyme 为 React 组件提供单元测试实用功能,例如允许浅渲染。 Enzyme 文档说您可以将它与任何测试运行程序或断言库一起使用 - 请参阅 http://airbnb.io/enzyme/。

是的,你可以在茉莉花上使用因果报应。

至于测试 react-redux 项目的最佳方法,这是一个单独的问题,我建议您搜索 Stack Overflow。 :)

【讨论】:

以上是关于Jest和酶有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

Jest 中的 describe 和 it 有啥区别?

Jest 中的“toBe”和“toEqual”有啥区别?

如何使用 jest 和酶测试 API 调用?

半保留半复制和边解旋边复制有啥区别

如何使用 jest 和酶测试 onClick() 函数和 useState 钩子

使用 Jest 和酶时如何在 React.useEffect 钩子上获得线路覆盖?