searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

基于Vue3 + vite项目,进行单元测试vitest配置

2024-06-12 08:11:23
12
0

背景

    单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证。对于单元测试中单元的含义,一般来说,要根据实际情况去判定其具体含义,如C语言中单元指一个函数,Java里单元指一个类,图形化的软件中可以指一个窗口或一个菜单等。单元测试是在软件开发过程中要进行的最低级别的测试活动,软件的独立单元将在与程序的其他部分相隔离的情况下进行测试。
    对于后端开发来说,编写单元测试并不陌生,它能在一定程度上发现bug,减少bug的产生;同时对于代码的重构也能提供必要的支持。那么问题来了,对于前端开发来说,有必要去编写单元测试吗?前端不仅仅是逻辑代码的编写,更多的是标记性语言和脚本语言,有渲染也有业务,该不该测试、如何测试是需要具体讨论分析的。

必要性

    前端项目开发一般都会使用mvvm框架、UI组件、lodash函数库等, 相当于是站在巨人的肩膀进行开发。而这些开源的项目往往都是做了充分的单元测试的,不需要我们去操心,我们要做的只是在自己的项目中进行一系列的业务开发,此时单元测试是没必要的,个人见解,有不同意见可以讨论。
    但是如果我们在开发过程中,需要自己手动去写一些公共函数或者公共组件,并作为项目底层,支撑着项目的“上层建筑”,此时就有必要对这些公共函数和公共组件进行单元测试了。

实现

1.下载单元测试插件。

npm install -D vitest @vitest/coverage-v8 @vue/test-utils

2.因为vitest和vite可以共用一套配置文件,可以在vite.config.ts文件中直接配置。

// <reference types="vitest" />
export default ({ mode, command }: { mode: any, command:any }) => {
  return defineConfig({
      test: {
      globals: true, 
      environment: 'jsdom',
      coverage: {
        provider: 'v8',
        all: true,
        enabled: true,
        reporter: ['lcov', 'html'], // 生产报告的格式,本地运行单元测试,可以注释该语句
        extension: ['.vue'],
      },
      server: {
        deps: {
          inline: ['element-plus'],
        }
      },
      include: ['**/test/**/*.{js,mjs,cjs,ts,mts,cts,jsx,tsx}'],
      passWithNoTests: true,
      // 测试报告生成文件
      outputFile: './coverage/junit.xml',
    },
  })
}

3.在package.json中添加单元测试命令。

"test:unit": "vitest run --coverage"

4.与src文件夹同级建立test文件夹,编写单元测试。建议test文件夹中的单元测试文件结构与src保持一致,方便后期查看。运行上述命令npm run test:unit即可显示覆盖率。

import { describe, expect, it } from 'vitest'
import { mount } from '@vue/test-utils'
import Button from '@/components/Button.vue'

describe('test button', () => {
  it('should have class', () => {
    const wrapper = mount(Button, {
      props: {
        type: 'primary'
      }
    })
    expect(wrapper.classes()).toContain('button--primary')
  })
})

总结

    综上分析了前端单元测试是否必要及单元测试实现的具体步骤,当然项目中是否要添加单元测试需要根据项目的具体情况进行分析,在本篇文章讲述过程中如有错误或不同意见,欢迎大家及时纠正。

0条评论
0 / 1000
w****n
11文章数
0粉丝数
w****n
11 文章 | 0 粉丝
原创

基于Vue3 + vite项目,进行单元测试vitest配置

2024-06-12 08:11:23
12
0

背景

    单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证。对于单元测试中单元的含义,一般来说,要根据实际情况去判定其具体含义,如C语言中单元指一个函数,Java里单元指一个类,图形化的软件中可以指一个窗口或一个菜单等。单元测试是在软件开发过程中要进行的最低级别的测试活动,软件的独立单元将在与程序的其他部分相隔离的情况下进行测试。
    对于后端开发来说,编写单元测试并不陌生,它能在一定程度上发现bug,减少bug的产生;同时对于代码的重构也能提供必要的支持。那么问题来了,对于前端开发来说,有必要去编写单元测试吗?前端不仅仅是逻辑代码的编写,更多的是标记性语言和脚本语言,有渲染也有业务,该不该测试、如何测试是需要具体讨论分析的。

必要性

    前端项目开发一般都会使用mvvm框架、UI组件、lodash函数库等, 相当于是站在巨人的肩膀进行开发。而这些开源的项目往往都是做了充分的单元测试的,不需要我们去操心,我们要做的只是在自己的项目中进行一系列的业务开发,此时单元测试是没必要的,个人见解,有不同意见可以讨论。
    但是如果我们在开发过程中,需要自己手动去写一些公共函数或者公共组件,并作为项目底层,支撑着项目的“上层建筑”,此时就有必要对这些公共函数和公共组件进行单元测试了。

实现

1.下载单元测试插件。

npm install -D vitest @vitest/coverage-v8 @vue/test-utils

2.因为vitest和vite可以共用一套配置文件,可以在vite.config.ts文件中直接配置。

// <reference types="vitest" />
export default ({ mode, command }: { mode: any, command:any }) => {
  return defineConfig({
      test: {
      globals: true, 
      environment: 'jsdom',
      coverage: {
        provider: 'v8',
        all: true,
        enabled: true,
        reporter: ['lcov', 'html'], // 生产报告的格式,本地运行单元测试,可以注释该语句
        extension: ['.vue'],
      },
      server: {
        deps: {
          inline: ['element-plus'],
        }
      },
      include: ['**/test/**/*.{js,mjs,cjs,ts,mts,cts,jsx,tsx}'],
      passWithNoTests: true,
      // 测试报告生成文件
      outputFile: './coverage/junit.xml',
    },
  })
}

3.在package.json中添加单元测试命令。

"test:unit": "vitest run --coverage"

4.与src文件夹同级建立test文件夹,编写单元测试。建议test文件夹中的单元测试文件结构与src保持一致,方便后期查看。运行上述命令npm run test:unit即可显示覆盖率。

import { describe, expect, it } from 'vitest'
import { mount } from '@vue/test-utils'
import Button from '@/components/Button.vue'

describe('test button', () => {
  it('should have class', () => {
    const wrapper = mount(Button, {
      props: {
        type: 'primary'
      }
    })
    expect(wrapper.classes()).toContain('button--primary')
  })
})

总结

    综上分析了前端单元测试是否必要及单元测试实现的具体步骤,当然项目中是否要添加单元测试需要根据项目的具体情况进行分析,在本篇文章讲述过程中如有错误或不同意见,欢迎大家及时纠正。

文章来自个人专栏
前端开发成长之路
11 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0