当前位置: 首页 > article >正文

前端单元测试框架 引入说明

1. 背景:

2. 如何选择:

2.1. 流行框架
  • Jest:由Facebook开源的JavaScript测试框架,应用于脸书系以及 ReactJs 系
  • Mocha:适用于 NodeJs 和 浏览器、简易、灵活、有趣的JavaScript 测试框架
  • Jasmine:BDD(行为驱动开发)测试框架,不依赖于browsers、DOM以及JS,适合websites、NodeJs项目
2.2. 性能对比

测试框架

断言

Mock

异步

快照

React友好程度

Jest

默认支持

默认支持

友好

默认支持

Mocha

不支持

不支持

友好

不支持(可配置)

Jasmine

默认支持

默认支持

不友好

默认支持

2.3. 框架选择

选择Jest作为daizong项目的前端单元测试框架

  • Jest是当前最流行的测试框架,尤其在React生态系统中应用广泛
  • 我们项目使用Ant Desgin作为UI组件库,而Ant Desgin它们选择的测试框架是Jest
  • 我们项目使用Umi4作为脚手架,而Umi4对Jest框架具有很好的支持

2.4. 测试库选择

要想对项目里的组件进行单元测试,仅仅Jest是不够的,还需要一款可以提供 DOM API的环境的库,即模拟浏览器环境。这样对组件进行单元测试时,就像真的运行在浏览器上测试。

针对React流行的测试库主要有两个:Enzyme 、React Testing Library

  • React官方推荐使用 React Testing Library 作为测试库
  • Umi4 对 React Testing Library 有更多的支持
  • React Testing Library 更倾向于事件驱动,更偏向模拟用户操作,而 Enzyme 对代码测试是通过控制代码状态来完成的,已逐渐被抛弃

因此,选择React Testing Library 作为测试库

3. 接入项目:

3.1. 小试牛刀

对项目关键字高亮基础组件写单元测试用例

3.1.1. 用例代码

3.1.2. 测试效果
npx jest --watch

3.1.3. 意义体现

单元测试的意义会在修改组件时体现。 上面给组件写了一个正常使用组件的测试用例,如果此时,我们修改组件代码,新增精准匹配,区分大小写的功能再运行测试用例 (不考虑兼容)。

  • 断言错误
  • 快照发生改变

测试用例不通过,证明会影响到原来组件的业务。

3.2. 如何展开

单元测试能保证函数、Hook、组件等代码单元的功能正常,把手动测试变成自动化测试。

但是写单元测试成本还是挺高的,如果代码改动频繁,那手动测试更合适。一些比较稳定的代码,还是有必要写单测的,写一次,自动测试 n 次,收益很大。

3.2.1. 测试目标
  • 核心的基础组件
  • 核心的工具函数
  • 稳定的公共组件
3.2.2. 测试规范
  • 保持测试简洁和明确:每个测试只关注一个行为或功能,避免过于复杂。
  • 使用描述性命名:测试名称应清晰描述其测试的功能或行为。
  • 避免过度模拟:只模拟必要的依赖,保持测试的真实性。

reference:

快速开始 · Jest

Introduction | Testing Library


http://www.kler.cn/a/393259.html

相关文章:

  • C++《继承》
  • 【练习案例】30个 CSS Javascript 加载器动画效果
  • WPF学习之路,控件的只读、是否可以、是否可见属性控制
  • uniapp+vue2 设置全局变量和全局方法 (兼容h5/微信小程序)
  • 24/11/13 算法笔记<强化学习> DQN算法
  • 鸿蒙自定义UI组件导出使用
  • SpringBoot(四)配置拦截器、filter、跨域
  • Day41 | 动态规划 :完全背包应用 完全平方数单词拆分(类比爬楼梯)
  • 【Paper Note】跨音频-视觉匹配识别的3D CNN
  • Apache Doris 技术系列文章:高级特性与性能优化
  • SpringBoot(三)集成日志
  • Java线程的sleep和wait的区别
  • 力扣 LeetCode 349. 两个数组的交集(Day3:哈希表)
  • 一文理解吸收《红黑树》的精华
  • AI生成字幕模型whisper介绍与使用
  • 软件开发中的 Pull Request 工作流:逐步指南
  • springboot读取modbus数据
  • 《AI 使生活更美好》
  • 【go从零单排】gin+gorm理解及实现CRUD
  • 机器学习系列----KNN分类
  • 【Linux网络】Linux网络编程套接字,UDP与TCP
  • PCB安全电气间距
  • Python网络爬虫与数据采集实战——网络协议与HTTP
  • linux命令详解,存储管理相关
  • 排序算法 -堆排序
  • SQL面试题——奔驰SQL面试题 车辆在不同驾驶模式下的时间