完全掌握vue全家桶单元测试 : 1. 为什么需要前端测试

1,791 阅读7分钟

为什么需要前端测试

引言:

在软件开发过程中,保证代码的质量和稳定性是至关重要的。而单元测试作为一种有效的测试手段,可以帮助开发团队提高代码的一致性、可维护性和发布效率。之前我的文章2023 年前端工程化都在谈些什么也说过,前端工程化就是围绕质量 + 效率展开的,所以前端测试其实是不可缺少的一部分。我分享两个有意思的故事

  1. 稀记得我在学第一门编程语言 java 的时候, 我跑 hello world 都会出错。那时候起,就在我心中埋下了种子,我写的代码,保障代码的质量是第一位。
  2. 记得在明源云的时候,当时我做新房开盘业务,涉及金额比较大,大家都很怕出问题,不断的加班,但我跟另一位老员工却能准时下班,因为他带我踏入了单元测试的领域,再没实践单元测试之前,我俩互相 review 代码 review 至少 3 次才敢上线,十分艰难.后来加上单元测试之后m react 18antd 5 出来了,我们也敢在第一时间升级。

所以有了单元测试,促进了组件库的升级,能保障升级之后不会出现主流程的问题,能识别破坏性的更改,是我们做新技术迭代的保障,更加能推动新技术的更新换代,下面来说说单元测试的好处。

单元测试的好处

单元测试提供了许多好处,下面我们将详细介绍其中的几点。

1. 保证程序代码的一致性

通过编写测试用例,可以确保代码在不同环境和场景下的一致性运行。通过运行单元测试,可以快速发现和修复潜在的代码问题,确保代码的质量和稳定性。

2. 更勇敢的升级各种版本库

单元测试使得团队更加勇敢地升级各种版本库,因为他们可以依赖测试套件来验证代码的正确性。这样,即使进行了大规模的版本库升级,也能够保证维护的代码不会变成一座屎山,减少了升级带来的风险和工作量。

3. 更好的发布版本,减少加班

通过单元测试,可以在发布之前进行全面的测试,从而减少发布后的错误和紧急修复。这使得发布过程更加可控,减少了加班和紧急处理的情况。

4. 鼓励新人放开手脚

有了单元测试,新人可以更加自信地开展工作,因为他们可以依赖测试套件来验证他们的代码是否正确。这种信心能够鼓励新人更加放开手脚,更快地融入开发团队。

5. 节省人力成本

单元测试可以替代手动测试的一部分工作,也能减少 code review 的次数,从而节省了人力成本。单元化测试可以在持续集成和持续交付流程中自动运行,减少了人工测试的工作量,使测试工程师能够更加专注于复杂的测试场景和手动测试的需求。

6. 写出健壮的代码

在编写单元测试时,我们需要将代码解耦和高内聚作为设计原则。这种思维方式能够帮助我们编写更健壮、可测试和可维护的代码。当我们为旧代码添加单元测试时,如果发现测试代码很难编写,那可能是因为代码的耦合度过高。采用单元测试的思想来编写代码,能够帮助我们实现高内聚和低耦合的代码结构。

7. 方便找工作

不论是国内大型企业,还是外企,都有单元测试的掌握程度的考核和要求

测试的难点

尽管单元测试带来了许多好处,但在实践中也存在一些挑战和难点。

1. 国内企业缺乏编写测试用例的时间

在国内的一些企业中,由于项目进度紧张和时间压力,测试用例编写往往被忽视或被放在次要位置。这导致了测试覆盖不足和代码质量下降的问题。

2. 缺乏完善的测试文档和最佳实践

在国内,关于测试的文档和最佳实践相对较少,版本不一致也导致了答案混乱,需要自己甄别答案的真伪,耗费了额外的时间,进而打击单元测试实践的热情

测试不是很万能

虽然测试在软件开发过程中扮演着重要角色,但我们需要认识到测试并不是万能的,特别是单纯依赖单元测试存在以下局限性:

1. 无法捕获所有的缺陷

尽管单元测试可以覆盖代码中的各种情况,但它们无法捕获所有潜在的缺陷。某些缺陷可能只在集成或系统级别上才会显现,甚至某些单元测试本身就是错的,因此手动测试仍然是必要的。

如何保证单元测试是对的呢?

2.难以测试并发和性能问题

单元测试主要关注代码的功能性验证,很难检测到并发和性能问题。这些问题需要通过其他测试手段,如压力测试和性能测试,来发现和解决。

3.难以模拟真实环境

在现实环境中,软件系统需要与其他组件、服务和外部系统进行交互。单元测试通常在隔离环境中运行,无法完全模拟真实的系统交互,从而可能无法发现与外部系统集成相关的问题。

为什么要学这套课程

市面上那么多测试文章,为什么还要学这个课程呢?

  • Vue Test Utils 官网的案例是结合 jest 编写的 demo, 部分版本较老,可能会导致官网示例教程无法运行通过
  • 官网 demo,不能所见即所得
  • 官网 demo 中 vue 的写法非常多样,option 和 composition 混用
  • jest 和 vue test utils 都是英文文档,有一定额外的学习成本
  • jest 配置的心智负担很重,vitest 就不需要考虑那么多配置的问题,且速度更快

课程大纲

技术栈使用 Vitest + Test Utils for Vue.js 3 。通过本课程,能完全掌握 vue3 + vue-router + pinia 的测试方法论,本测试案例将会全程使用 composition api 来编写,根据以下章节由浅入深,分阶段展开。

  • 搭建 vitest 环境
  • 单元测试
  • 组件测试
  • mock
  • 浏览器测试
  • vue router 测试
  • vuex 测试
  • piana 测试
  • 单元测试最佳实践
  • 实战 lodash 测试源码
  • 实战 element-plus 测试源码
  • 如何利用 coze 编写单元测试

文章尽量通俗易懂,每一章都有完善的测试代码, 有 100 多个实战案例,方便可视化的运行,让你快速掌握 vue 全家桶的单元测试技能。

image.png

image.png

课件地址

上面的代码,都放到了 github 上,欢迎点赞收藏,我会持续更新代码和文章,消息窗口我,或者直接加我 wechat: match124

往期文章

完全掌握vue全家桶单元测试 : 1. 为什么需要前端测试

完全掌握vue全家桶单元测试 : 2. 搭建 vitest 环境

完全掌握vue全家桶单元测试 : 3. vitest 用法概览

完全掌握vue全家桶单元测试 : 4.断言常用方法

完全掌握vue全家桶单元测试 : 5.组件基本测试

完全掌握vue全家桶单元测试 : 6. 深入理解组件测试

完全掌握vue全家桶单元测试 : 7. 事件处理

完全掌握vue全家桶单元测试 : 8. mock 与替身技巧大全

完全掌握vue全家桶单元测试 : 9. timer 测试

完全掌握vue全家桶单元测试 :10. 如何测试浏览器原生方法

如果你有疑惑或者更好的建议欢迎加我微信拉你进群一起学习和讨论

IMG_4595.JPG