| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 开发测试 -> GrowingIO Design 组件库搭建之单元测试 -> 正文阅读 |
|
[开发测试]GrowingIO Design 组件库搭建之单元测试 |
前言GrowingIO Design 是用 React 编写的组件库,本质上就是 React 组件,你可以用像测试其他 JavaScript 代码类似的方式测试 React 组件。现在有许多种测试 React 组件的方法。大体上可以被分为两类:
我们对于第一类称之为单元测试,本文主要专注于这种情况的测试策略;第二类称为端到端(end-to-end)测试,完整的端到端测试在防止对重要工作流的多次回归方面很有价值,对于组件的端到端测试会有专门一篇文章来介绍。 工具调研对于测试工具的选择,主要从 2020 年的 State of JavaScript Survey 中列出的工具挑选。我们先从“使用度”和“满意度”两个角度来看测试生态圈的比较常用工具。 测试工具使用度对比 测试工具满意度对比 Jest、Storybook 在“使用度”和“满意度”上都获得了比较高的分数,新进入的 Testing Library 在“满意度”上也获得了高分。
除了以上的几款工具,看看其他工具的用户百分比: 工具选择先看看 React 官方网站(目前最新版本 v17.0.2)推荐的工具:
? 实际上在 v16.7.0 版本的网站上,他们还推荐了另一个工具:
先说说 Jest,Jest = jsdom + Mocha + Sinon + Chai,从这里可以看出 Jest 的强大,而且它还是开箱即用的。 从 2018 年甚至更早,我们一直使用 Jest + Enzyme 来编写的单元测试,但是到 2020 年了,我们需要重新审视一下,选择一个目前来说合适的工具。后文主要拿 RTL 做对比后,先从历史说起。 一点历史
npm trends 上图是 Enzyme 和 RTL 在两年内下载量的趋势,大约在 2020 年 9月,RTL 的下载量实现反超,并在以后的一年里一骑绝尘。 现在看来,整个业界似乎已经转向 RTL 了。 Talk is cheap, Show me code假设我们现在有 Toggle 这样的一个组件:
Toggle 组件的测试用例至少包含以下两个:
使用 Enzyme 来实现,如下:
使用 Testing Library 来实现,如下:
小结借助 RTL,你可以轻松地编写测试,这些测试充分代表了用户如何体验应用程序。比方说,当你用 RTL 编写测试时,你在测试你的应用程序,就像你是与应用程序界面交互的用户一样。 另一方面,当你用 Enzyme 写测试时,即使你也能达到与 RTL 相同的自信水平,以类似于真实用户的方式构建测试结构有点麻烦。 另外的一些实践快照测试快照测试是 Jest 的特性,来自 Jest 官网的介绍:
你可以使用测试渲染器快速为 React 树生成可序列化的值,而不是渲染图形 UI,可能需要构建整个应用程序。看一个具体的例子:
运行 Jest 后,将会生成快照文件,类似这样:
快照工件应与代码更改一起提交,并作为代码审核过程的一部分进行审核。 接下来看看 Jest 官网给出的三点最佳实践:
根据我们在 GrowingIO Design 中的实践,不需要为每个组件以及组件的每种状态都生成快照。有以下两点原因:
Storybook在《GrowingIO Design 组件库搭建之组件开发》一文中提到组件的文档工具,使用 Storybook 来编写组件 Demo,这些 Demo 可在单元测试工具中重复使用。每个 Demo 在不依赖 Storybook 的情况下都是 “可渲染的”。这意味着任何的测试框架也将能够渲染 Demo。 以下是如何在 RTL 中使用它的示例:
总结最看重的一点是 RTL 专注于测试用户体验——毕竟,这才是真正重要的。我们的客户不会看到我们的组件有什么 props,或者它们是数组还是对象,客户只关心它是否正常工作——并且会帮助你在未来交付价值。 React 的未来在于基于函数的组件、React Hooks、异步渲染,而这些特性今天最好搭配 RTL 使用。纵观 Enzyme 过去三年的发展历程,它似乎不太可能赶上所有这些特性,同时还能解决其他那么多问题。 更值得一提的是,使用 RTL 有助于提高组件库的无障碍性(Accessibility,简称 a11y)。对于组件库无障碍性,后面会用一篇文章来详细介绍。 参考
? |
|
开发测试 最新文章 |
pytest系列——allure之生成测试报告(Wind |
某大厂软件测试岗一面笔试题+二面问答题面试 |
iperf 学习笔记 |
关于Python中使用selenium八大定位方法 |
【软件测试】为什么提升不了?8年测试总结再 |
软件测试复习 |
PHP笔记-Smarty模板引擎的使用 |
C++Test使用入门 |
【Java】单元测试 |
Net core 3.x 获取客户端地址 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/17 20:44:43- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |