Skip to content

单元测试指南

测试类型

  • 单元测试:指的是以软件的单元为单位进行测试。单元可以是一个函数、一个模块或一个组件。其基本特征是只要输入不变,必定返回同样的输出。软件越容易编写单元测试,通常表明其模块化结构越好,模块间的耦合越弱。
  • 集成测试:在单元测试的基础上,将所有模块按照设计要求组装成子系统或系统,进行测试以验证模块间的接口与协作。
  • 功能测试:相当于黑盒测试。测试者不了解程序内部逻辑,只关注程序的输入、输出和功能,从用户角度对界面、功能和外部结构进行测试。
  • 端到端测试:一种测试方法,用于测试整个软件系统的功能和性能。它模拟真实用户的操作流程,从用户界面开始,验证系统各组件间的交互与协作。
  • 冒烟测试:在正式进行全面测试之前,对软件的主要功能进行的快速测试,目的是确认主要功能是否正常,软件是否能运行。

什么是单元测试

单元测试(Unit Testing)是指对软件中的最小可测试单元进行检查和验证的测试活动。最小可测试单元通常是函数、方法或类。

  • 目的:在开发过程中尽早发现和解决代码问题,确保软件质量与稳定性。
  • 执行者:通常由开发人员编写。
  • 特性:自动化、可重复运行。通常利用测试框架和断言库来编写与运行测试用例。
  • 优点
    • 提高代码质量和可维护性。
    • 减少错误和缺陷。
    • 提高代码可读性和可重用性。
    • 早期发现问题,降低开发成本与风险。

主流前端单测框架对比

下表对几种主流的 JavaScript/TypeScript 单元测试框架进行了对比:

特性VitestJestMochaJasmineAva
开发者自主研发Facebook 开源Mochajs 开源Pivotal Labs 开源原创
npm周下载4,050,19223,587,8927,660,8311,519,135299,381
文档质量高(中文)极低无官方文档
异步测试支持支持支持支持支持
Mock支持支持支持支持支持
覆盖率支持支持支持支持支持
快照测试支持支持不支持不支持支持
并行测试支持支持支持不支持支持
配置难度
社区支持
断言库内置内置需手动安装需手动安装内置
应用案例Vite, Vue3Lodash, ReactExpressAngular-

总结与选择建议:

  • Jest:应用最广泛的“开箱即用”测试框架,适用于各种 JS/TS 项目,社区生态庞大。
  • Vitest:Vite 项目的首选测试框架,专为 Vite 设计,与 Vite 的配置、转换器和解析器保持一致,开发体验更优。Vue3、Vite 等新项目多采用它。其 API 与 Jest 高度兼容。
  • Mocha:灵活的老牌框架,常见于较老的项目中。需要自行搭配断言库和报告工具。
  • 综合建议
    • Vite 项目推荐使用 Vitest
    • 其他类型的前端项目(如 Webpack、Create React App)推荐使用 Jest

前端开源项目单测使用情况

框架分类框架单测框架
前端开源框架Vue.js 2.xJest
Vue.js 3.xVitest
ViteVitest
ReactJest
AngularKarma + Jasmine
SvelteVitest
Node 开源框架ExpressMocha
前端开源 UI 框架Element PlusVitest
Ant Design (React)Jest
Ant Design VueJest
Naive UIJest
NG-ZORRO (Angular)Ng Test (Karma/Jasmine)
前端工具库AxiosKarma
LodashJest
BabelJest

注:部分项目(如 naive-ui、Ant Design Vue)因历史原因或构建工具(Webpack)未使用 Vitest,但新启动的 Vite 项目普遍倾向选择 Vitest。

单测优点

  1. 提高代码质量与稳定性:从源头上减少 Bug,功能稳定时,单测是保障生产安全的重要防线。
  2. 减少后期 Bug 数量:帮助开发人员在代码提交前发现并解决问题。
  3. 实现“文档化”:优秀的单测本身就是最准确、最及时的使用文档。
  4. 提高开发效率:快速反馈问题,增强重构和修改代码的信心。
  5. 降低维护成本:通过强制编写可测试的代码来降低模块间的耦合度,从而降低长期维护的复杂度。
  6. 建立安全网:代码变更时,单元测试能迅速捕获回归错误,是持续集成的关键环节。

参考资源

官方网站

优秀博客