【问题标题】:React UnitTest with Jest and Enzyme用 Jest 和 Enzyme 反应单元测试
【发布时间】:2020-08-27 22:29:21
【问题描述】:
令我惊讶的是,许多博客都使用 Jest 和 Enzyme 为 React 应用程序编写单元测试。
不能,我们为 React 应用程序编写单元测试是使用唯一的玩笑还是唯一的 Enzyme??
如果是,要获得一个组件,我们在酶中使用了 shallow(),但在 Jest 中使用的是什么?
【问题讨论】:
标签:
reactjs
react-native
testing
jestjs
enzyme
【解决方案1】:
我认为你没有完全理解jest 和enzyme 的概念。
开玩笑
TL;DR: Jest 只是一个为 JavaScript 开发类固醇的测试运行器(不仅仅是 react)。
jest 的主要功能是执行 JavaScript 测试。它为您提供了组织测试的工具,例如使用describe、it 或test 块。 jest 带有很多 build-in assertions(例如 expect(actual).toBe(expected))来帮助您识别失败和成功的测试。最重要的是jest 带有附加功能,例如它允许您轻松地mock functions 甚至complete modules。
jest 通常不绑定到react,但与react 结合使用效果很好,因为它由facebook 维护,就像react 本身一样。所以基本上每次都是正确的joice和recommended by react。
酶
TL;DR: 实用程序集合,用于简化react 组件的测试/渲染。
从技术上讲,您不需要Enzyme 或任何其他框架来测试react 组件(仅jest)。 react 已经公开了 react-dom/test-utils,但是如果没有正确包装和简化其 API,那么与这些人一起工作真的很麻烦。这正是enzyme 正在做的事情。它基本上在react-dom/test-utils 之上放置了一层抽象,并添加了一堆实用程序,因此您无需担心自己实现它们。
我强烈建议您查看react-testing-library,这是enzyme 的替代品,并阅读其创始人撰写的"Testing Implementation Details" blog post。
react-testing-library 就像jest、recommended by react。
【解决方案2】:
Jest 和 Enzyme 没有可比性。
Jest 不会为您提供丰富的 API/函数来访问诸如酶之类的 dom 元素,但它会执行其他重要任务,例如当您点击命令 npm test 或 npm run test 时会收集所有测试文件,例如所有以 .test 结尾的文件.js 在这些文件中运行每个测试用例,并在控制台中显示结果,就像它的笑话一样。
Jest 是一个测试框架或测试运行程序,它可以一次性运行所有测试文件,酶是一个实用程序或库,与 jest 相比,它认为这是一个更小的东西,它提供了许多函数来轻松访问 dom,例如 shallow, mount, find, children, etc...