Vue前端Jest自动化测试入坑( 上 )

简介: Vue前端Jest自动化测试入坑

前话

关于前端测试,关注点更侧重于行为正确而不是数据正确,你的测试结果不需要考虑后台返回的数据是否正确,而是能否正常触发请求,拿到结果后能否按照设计流程正常执行代码

1. 学习前提

js + es6 + npm + git + vue

2. 学习目标

  1. 入门前端自动化测试
  2. 根据项目完成测试方案的选型
  3. 掌握主流前端测试工具的使用

3. 安装jest(本文基于版本24.8.0)

npm i --save-dev jest@24.8.0复制代码

4. Jest配置

npx jest --init复制代码

5. 为了正常使用ES模块需要安装babel(本文基于版本7.4.5)

npm i --save-dev @babel/core@7.4.5 @babel/preset-env@7.4.5复制代码

创建 babel 配置文件 .babelrc

{
    "presets": [
        [
            "@babel/preset-env", {
                "targets": {
                    "node": "current"
                }
            }
        ]
    ]
}复制代码

babel 运行原理简介

7ec85713bbd6c10434557da90051639.png

6. 简单测试用例(实际开发中可以使用 jest 插件自动检测运行文件)

jest 运行时会查找项目下以 test.js 结尾的文件并运行测试文件,这里以 math.js 和 math.test.js 文件为例

  • math.js
export function add (a, b) {
    return a + b
}
export function minus (a, b) {
    return a - b
}
复制代码
  • math.test.js
import { add, minus } from './math'
test('测试加法 5 + 5', () => {
    expect(add(5, 5)).toBe(10)
})
test('测试减法 10 - 5', () => {
    expect(minus(10, 5)).toBe(5)
})复制代码

关于 test( ), expect( ).toBe( ) 方法是 jest 里主要的一些测试方法,后面也会继续介绍其它方法,想了解方法内部原理请参考jest官网或查看源码

7. 生成代码测试覆盖率报告

npx jest --coverage复制代码

292c13c5140d12d56bf3d71ccdcb7ed.png

到这里,一个简单的自动化测试流程就已经跑完了,简单吧^_^

当然,实际项目中的情况要比这复杂多,现在我们继续深入学习

8. Jest 匹配器

什么是匹配器? 之前用例中 expect( a ).toBe( b ) 其实就是一个匹配器

匹配器通俗讲就是判断两个值a, b关系的规则

常用匹配器

// 匹配值相等
expect(a).toEqual(b)
// 匹配 null
expect(a).toBeNull()
// 匹配 undefined
expect(a).toBeUndefined()
// 是否定义
expect(a).toBeDefined()
// 是否为真
expect(a).toBeTruthy()
// 是否为假
expect(a).toBeFalsy()
// not 匹配器 (取反)
expect(a).not.toBeFalsy()
// 数字大小 a > b
expect(a).toBeGreaterThan(b)  // toBeGreaterThanOrEqual
// 数字大小 a < b
expect(a).toBeLessThan(b)  // toBeLessThanOrEqual
// 小数近似
expect(a).toBeCloseTo(b)
// 字符串匹配
expect(a).toMatch('string')
// 数组匹配
expect(arr).toContain(obj)
// 异常检测
expect(fn).toThrow()复制代码

9. 监听模式

npx jest --watchAll
npx jest --watch  // 与 git 联合使用,自动检测修改过代码的文件复制代码

启动后按 w 可查看更多模式

3c8b8eafe86a94605c141e9b0cfb6e3.png

10. 异步代码测试

以请求数据为例( 自行安装 axios )

// 使用 done 判断回调完成
test('测试异步', (done) => {
    axios.get('http://www.dell-lee.com/react/api/demo.json').then(res => {
        expect(res.data).toEqual({
            success: true
        })
        done()
    })
})
// 使用 assertions 规定 expect 执行次数
test('测试异步', () => {
    expect.assertions(1)
    return axios.get('http://www.dell-lee.com/react/api/demo.json').then(res => {
        expect(res.data).toEqual({
            success: true
        })
    })
})
// 使用 resolves 方法
// toMatchObject 匹配对象某个属性值
test('测试异步', () => {
    return expect(axios.get('http://www.dell-lee.com/react/api/demo.json')).resolves.toMatchObject({
        data: {
            success: true
        }
    })
})
test('测试异步', async () => {
    await expect(axios.get('http://www.dell-lee.com/react/api/demo.json')).resolves.toMatchObject({
        data: {
            success: true
        }
    })
})
// 使用 rejects 判断异常
test('测试异常', () => {
    return expect(axios.get('http://www.dell-lee.com/react/api/demo1.json')).rejects.toThrow()
})
test('测试异常', async () => {
    await expect(axios.get('http://www.dell-lee.com/react/api/demo1.json')).rejects.toThrow()
})
// 推荐写法
test('异步测试', async () => {
    const response = await axios.get('http://www.dell-lee.com/react/api/demo.json')
    expect(response.data).toEqual({
        success: true
    })
})复制代码

11. Jest 中的钩子函数

// 全部测试前执行
beforeAll(() => {
    // 逻辑
})
// 每次测试前执行
beforeEach(() => {
    // 逻辑
})
// 全部测试后执行
afterAll(() => {
    // 逻辑
})
// 每次测试后执行
afterEach(() => {
    // 逻辑
})
// 分组测试
describe('描述',() => {
    // 测试案例...
    test()...
})复制代码

12. Jest 中的 Mock()

此部分有许多高级用法,会结合异步测试对api请求测试做处理,实战中请多看官方文档,后续有时间我也会在写个专题

test('测试回调', () => {
    // mock 函数 捕获函数调用和返回结果
    // 也可以自定义返回结果,
    const func = jest.fn() 
    // runCallback要测试的回调函数
    runCallback(func)
    expect(func.mock.calls).toBe('val')
})
// 测试调用接口
import axios from 'axios'
jest.mock('axios')
test('测试请求', async () => {
    // 模拟返回,一般前端测试不会发真实请求
    axios.get.mockResolvedValue({ data: 'hello'})
    await getData().then(data => {
        expect(data).toBe('hello')
    })
})复制代码

待续

本篇上部至此告一段,都是总结一些Jest基础的东西,有点基础的同学其实看官方文档就能入门,我也只是学习时顺手写点东西加深下印象,希望对各位入坑有所帮助,下篇开始真正结合 Vue 讲一讲如何进行一个完整测试



相关文章
|
2月前
|
前端开发 JavaScript 测试技术
前端测试技术中,如何提高集成测试的效率?
前端测试技术中,如何提高集成测试的效率?
|
5天前
|
JavaScript 前端开发 jenkins
抛弃node和vscode,如何用记事本开发出一个完整的vue前端项目
本文探讨了在不依赖Node和VSCode的情况下,仅使用记事本和浏览器开发一个完整的Vue3前端项目的方法。通过CDN引入Vue、Vue Router、Element-UI等库,直接编写HTML文件实现页面功能,展示了前端开发的本质是生成HTML。虽然日常开发离不开现代工具,但掌握这种基础方法有助于快速实现想法或应对特殊环境限制。文章还介绍了如何用Node简单部署HTML文件到服务器,提供了一种高效、轻量的开发思路。
40 10
|
2天前
|
JavaScript NoSQL Java
基于SpringBoot+Vue实现的大学生体质测试管理系统设计与实现(系统源码+文档+数据库+部署)
面向大学生毕业选题、开题、任务书、程序设计开发、论文辅导提供一站式服务。主要服务:程序设计开发、代码修改、成品部署、支持定制、论文辅导,助力毕设!
17 2
|
2月前
|
JavaScript 前端开发 搜索推荐
Vue的数据驱动视图与其他前端框架的数据驱动方式有何不同?
总的来说,Vue 的数据驱动视图在诸多方面展现出独特的优势,其与其他前端框架的数据驱动方式的不同之处主要体现在绑定方式、性能表现、触发机制、组件化结合、灵活性、语法表达以及与后端数据交互等方面。这些差异使得 Vue 在前端开发领域具有独特的地位和价值。
107 58
|
1月前
|
前端开发 JavaScript 测试技术
前端自动化测试
前端自动化测试是通过使用工具和脚本自动执行测试用例的过程,旨在提高测试效率、减少人为错误,并确保Web应用的功能在不同环境和设备上的一致性与稳定性。
|
2月前
|
监控 JavaScript 前端开发
如何在实际应用中测试和比较React和Vue的性能?
总之,通过多种方法的综合运用,可以相对客观地比较 React 和 Vue 在实际应用中的性能表现,为项目的选择和优化提供有力的依据。
52 1
|
2月前
|
前端开发 JavaScript 测试技术
前端小白逆袭之路:如何快速掌握前端测试技术,确保代码质量无忧!
【10月更文挑战第30天】前端开发技术迭代迅速,新手如何快速掌握前端测试以确保代码质量?本文将介绍前端测试的基础知识,包括单元测试、集成测试和端到端测试,以及常用的测试工具如Jest、Mocha、Cypress等。通过实践和学习,你也能成为前端测试高手。
82 4
|
2月前
|
机器学习/深度学习 自然语言处理 前端开发
前端神经网络入门:Brain.js - 详细介绍和对比不同的实现 - CNN、RNN、DNN、FFNN -无需准备环境打开浏览器即可测试运行-支持WebGPU加速
本文介绍了如何使用 JavaScript 神经网络库 **Brain.js** 实现不同类型的神经网络,包括前馈神经网络(FFNN)、深度神经网络(DNN)和循环神经网络(RNN)。通过简单的示例和代码,帮助前端开发者快速入门并理解神经网络的基本概念。文章还对比了各类神经网络的特点和适用场景,并简要介绍了卷积神经网络(CNN)的替代方案。
418 1
|
2月前
|
前端开发 数据管理 测试技术
前端自动化测试:Jest与Cypress的实战应用与最佳实践
【10月更文挑战第27天】本文介绍了前端自动化测试中Jest和Cypress的实战应用与最佳实践。Jest适合React应用的单元测试和快照测试,Cypress则擅长端到端测试,模拟用户交互。通过结合使用这两种工具,可以有效提升代码质量和开发效率。最佳实践包括单元测试与集成测试结合、快照测试、并行执行、代码覆盖率分析、测试环境管理和测试数据管理。
109 2
|
10天前
|
数据可视化 前端开发 测试技术
接口测试新选择:Postman替代方案全解析
在软件开发中,接口测试工具至关重要。Postman长期占据主导地位,但随着国产工具的崛起,越来越多开发者转向更适合中国市场的替代方案——Apifox。它不仅支持中英文切换、完全免费不限人数,还具备强大的可视化操作、自动生成文档和API调试功能,极大简化了开发流程。