7Day玩转单元测试-了解单元测试(1Day)

146 阅读4分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第1天,点击查看活动详情

www.jestjs.cn/docs/gettin…

跟着然叔学习单元测试第一天

🚩 学习目标

  • 了解单元测试与自动化测试的概念
  • 掌握jsest的基本用法、断言、mock
  • 掌握Vitest完成组件的单元测试

单元测试的必要性

单元测试是白盒测试,是确保代码质量的,而配置项测试和系统测试是黑盒测试,是验证整体软件的功能是否正确。单元测试的作用不可能被配置项测试和系统测试所取代。

单元测试的重要性体现在以下几个方面:

  • 进行单元测试可以节约很多时间

如果做好单元测试,去除了代码中潜在的设计错误,那么后续的测试级别(集成测试、配置项测试、系统测试等)就会节约很多时间。反之,如果没有做单元测试或者单元测试做的不好、敷衍了事,那么在进行后续的测试级别时,总会遇到那些本该在单元测试就能发现的问题,而且这些问题往往还是很难发现的。这会使后续的测试周期远超计划,不断延迟。

  • 进行单元测试可以提升测试绩效

首先,单元测试是测试阶段的基础。只有做好单元测试,才会使得后续的集成测试、配置项测试、系统测试等更加容易。其次,单元测试是白盒测试,在单元测试过程中能够发现一些深层次的,在系统测试(黑盒测试)当中很难发现的问题。最好,单元测试不仅仅能够验证代码做了些什么,更重要的是了解代码是如何做的,以及是否做了它应该做的事情和没有做它不该做的事情。

  • 进行单元测试可以降低测试成本

代码中的一些设计错误,在单元测试的时候很容易发现,纠正成本也比较低;但是,如果这些错误直到后期的系统测试的时候才发现,再要纠正这个问题,所需要的成本就成几何倍数的上升。

  • 进行单元测试可以提升产品质量

进行单元测试可以去除代码中的设计错误,提升代码的质量。而如果不进行单元测试,后续的配置项测试、系统测试又很难发现这些错误,那么这些错误就被隐藏在交付的软件中,这样交付软件的质量就难以得到保证。

单元测试的特点

  1. 必要性:JavaScript缺少类型检查,编译期间无法定位到错误,单元测试可以帮助你测试多种异常情况。
  2. 正确性:测试可以验证代码的正确性,在上线前做到心里有底。
  3. 自动化:通过console虽然可以打印出内部信息,但是这是一次性的事情,下次测试还需要从头来过,效率不能得到保证。通过编写测试用例,可以做到一次编写,多次运行。
  4. 保证重构:互联网行业产品迭代速度很快,迭代后必然存在代码重构的过程,那怎么保证代码的质量呢?有测试用例做后盾,就可以大胆进行重构。

Jest完成一个单元测试

Jest是Facebook开源的一套JavaScript测试框架,它集成了断言、JSDom、覆盖率报告等开发者所需要的所有测试工具。

npm i jest -g

测试加法程序

add.js

const add = (a,b) => a+b
module.exports = add

测试程序

目录结构

  1. src目录中创建__tests__文件夹
  2. tests_文件夹下创建与需要测试文件一样名字的xx.spec.js文件
  3. 书写xx.spec.js
const add = require('../add')

// 测试单元
describe('测试add函数',()=>{
    // 1+2
    test('add(1,2) === 3',()=>{
         // 断言
        expect(add(1,2)).toBe(3)
    })
    // 2+2
    test('add(2,2) === 4',()=>{
        // 断言
        expect(add(2,2)).toBe(4)
    })
})

将如下代码添加到 package.json 中:

{
  "scripts": {
    "test": "jest"
  }
}

最后,运行 npm run test ,Jest 将输出如下信息:

 PASS  src/__tests__/add.spec.js
  测试add函数
    ✓ add(1,2) === 3 (2 ms)
    ✓ add(2,2) === 4

Test Suites: 1 passed, 1 total
Tests:       2 passed, 2 total
Snapshots:   0 total
Time:        0.321 s, estimated 1 s

在此测试中,使用了 expecttoBe 来检测两个值是否完全相同。