前端-单元测试-基础入门

143 阅读3分钟

单元测试

了解单元测试

在日常中,我们常会听到自动化测试相关的词汇,那么我们先来了解一下自动化测试有哪些。

1、自动化测试分类

自动化测试类型常分为以下三种,各有优缺点:

  • 单元测试(Unit Test)

    • 对项目中低耦合的工具类库和公共子组件进行测试,较为简单,能在一定程度上保障代码质量
  • 集成测试(Integration Test)

    • 对于耦合度较高的函数/组件对外暴露的接口进行测试,能较大程度保障产品质量,但开发成本高
  • UI测试(UI Test)

    • 前端中UI变动大,适合人工检查

这篇文章就是学习单元测试的记录。

了解测试术语

  • 1、TDD(测试驱动开发)
  • 2、BDD(行为驱动开发)
  • 3、测试覆盖率
  • 4、快照测试
  • 5、模拟函数
  • 6、断言

2、单元测试框架

  • Jest:是一个广受欢迎的单元测试框架,简单易用,功能强大。
  • Vitest:它由 Vue / Vite 团队成员开发和维护,在 Vite 的项目集成它会非常简单,而且速度非常快。
  • Mocha:一个灵活的测试框架,需要各种插件来配合使用。
  • Karma:能在真实的浏览器中测试,可配置其他单元测试框架
  • Jasmine:功能全面的测试框架,相对复杂、不够灵活

3、单元测试适用的测试对象有哪些?

  • 1、常见工具类函数
  • 2、公共子组件
  • 3、接口请求数据

Jest 单元测试基础入门

1、实战测试

首先简单看一个代码示例:

//一个简单的纯函数 math.js
const sum = (a,b) => a + b
export default sum
//单元测试 math.test.js
import sum from './math'
describe('Math module',()=>{
    test('测试加法',()=>{
        const number = 1
        const anotherNumber = 2
        const result = sum(number,anotherNumber)
        //expect期待  表示期望我们的结果是3  会返回true或false
        expect(result).toBe(3)
    })
})

想要执行它,我们得在package.json中添加我们的测试指令:

"script":{
    "test": "jest"
}

这样我们在命令行中执行yarn test就可以执行测试了。正常来说是没有问题的,假设我们不小心改到了sum函数,变成const sum = (a,b) => a + 1,那么 Jest测试 就会为我们显示错误:

Expected: 3

Received: 2

2、Given/When/Then 的套路

Given/When/Then 的套路也可以用 3个A 来表示:Arrange、Act、Assert

  • Arrange:准备测试数据--有时可以抽取到beforeEach
  • Act:采取行动--调用相应的模块,执行对应的函数或组件渲染方法
  • Assert:断言--借助于 Matchers断言器 的能力来判断结果是否符合预期,Jest还支持扩展自定义Matcher

3、断言语句 Matcher

  • toBe(value) 例:expect(1+1).toBe(2) 也可以不等于 expect(1+1).not.toBe(3)
  • toEqual(value) 与toBe类似,但区别是:toBe类似于===,而同Equal类似于==
  • toBeFalsy() 判断布尔值
  • toHaveLength(number) 判断数组长度
  • toHaveBeenCalled() 判断当前方法是否被调用
  • toHaveBeenCalledTimes(number) 判断当前方法被调用的次数
  • toThrow(error?) 查看异常
  • expect.extend(matchers) 可扩展自定义断言器