vite + vue3 的项目中使用 vitest 做单元测试(仅供参考)

2023-09-15 17:24:34

一、配置文件

// vitest.config.ts

import { fileURLToPath } from 'node:url'
import { mergeConfig, defineConfig } from 'vite'
import { configDefaults } from 'vitest/config'
// import viteConfig from './vite.config'


import vue from '@vitejs/plugin-vue'
import vueJsx from '@vitejs/plugin-vue-jsx'


export default mergeConfig(
  defineConfig({
    // 安装了tsx插件才需配置
    plugins: [
      vue(),
      vueJsx(),
    ],
  }),
  defineConfig({
    test: {
      globals: true,
      // 测试环境,模拟浏览器环境的库jsdom
      environment: 'jsdom',
      // 测试覆盖工具
      coverage: {
        provider: "c8"
      },
      // 测试报告
      reporters: ['junit'],
      // 测试报告生成文件
      outputFile: './coverage/junit.xml',
      exclude: [...configDefaults.exclude, 'e2e/*'],
      root: fileURLToPath(new URL('./', import.meta.url)),
      transformMode: {
        web: [/\.[jt]sx$/]
      }
    }
  })
)

二、全量覆盖率报告

在 vitest 中 集成了c8,c8 是测试覆盖率检查的工具,告诉开发者代码中有哪些代码行被覆盖了,哪些没有覆盖。

在package.json增加npm script

"test:coverage": "vitest --coverage"

如果没安装c8,运行命令的话,Vitest 会提示安装 c8,默认yes,回车执行安装。安装后,命令行删除测试覆盖率,同时在 src/coverage 下生成一个测试报告。

三、测试报告

在package.json增加npm script

"test:unit": "vitest --watch=false --coverage --reporter=junit",

四、关闭热更新

配置一个命令行参数–watch==false 就可以关闭这种行为

"test:unit": "vitest --watch=false --coverage"

五、编写测试用例

打开 vscode 新建一个 components 目录并新增一个button目录,然后再建一个__test__目录放测试文件,elemetn-plus 源码也是这样做的,在里面新建一个xxx.test.ts 或者 tsx 的文件(没安装tsx就建ts文件)。

vitest默认会检测项目中所有.test.ts或者.test.tsx等之类的测试文件,这个是可以修改的,具体配置可以参考官网去改。

// HelloWorld.spec.ts

import { describe, it, expect } from 'vitest'


import { mount } from '@vue/test-utils'
import HelloWorld from '../HelloWorld.vue'

describe('HelloWorld', () => {
  it('renders properly', () => {
    const wrapper = mount(HelloWorld, { props: { msg: 'Hello Vitest' } })
    expect(wrapper.text()).toContain('Hello Vitest')
  })
})
// HelloWorld.vue

<script setup lang="ts">
defineProps<{
  msg: string
}>()
</script>

<template>
  <div class="greetings">
    <h1 class="green">{{ msg }}</h1>
    <h3>
      You’ve successfully created a project with
      <a href="https://vitejs.dev/" target="_blank" rel="noopener">Vite</a> +
      <a href="https://vuejs.org/" target="_blank" rel="noopener">Vue 3</a>. What's next?
    </h3>
  </div>
</template>

<style scoped>
h1 {
  font-weight: 500;
  font-size: 2.6rem;
  position: relative;
  top: -10px;
}

h3 {
  font-size: 1.2rem;
}

.greetings h1,
.greetings h3 {
  text-align: center;
}

@media (min-width: 1024px) {
  .greetings h1,
  .greetings h3 {
    text-align: left;
  }
}
</style>

参考

Vitest | 由 Vite 提供支持的极速单元测试框架

Vite | 下一代的前端工具链

Vitest: 现代前端测试框架 - 知乎

更多推荐

9.20广读论文 核心思路笔记

LearnWhatNOTtoLearn:TowardsGenerativeSafetyinChatbots摘要:会话模型中,生成型和开放领域的模型尤其容易产生不安全内容,因为它们是在基于网络的社交数据上进行训练的。以前缓解这个问题的方法有缺点,比如打断对话的流畅性,对未见过的有毒输入上下文的泛化有限,以及为了安全而牺牲

Oracle常见的等待事件

Oracle常见的等待事件等待事件分类常见等待事件buffer等待事件gc等待事件librarycache等待事件cursor等待事件directpath等待事件controlfile等待事件dbfile等待事件logfile等待事件SQL*Net等待事件enq:TX等待事件等待事件分类等待事件有如下分类:admini

折线图geom_line()参数选项

往期折线图教程图形复现|使用R语言绘制折线图折线图指定位置标记折线图形状更改|绘制动态折线图跟着NC学作图|使用python绘制折线图前言我们折线的专栏推出一段时间,但是由于个人的原因,一直未进行更新。那么今天,我们也参考《R语言实战》中折线图部分的讲解,分享给大家。在此书中,关于折线图的绘制教程相对讲解较少,我们要很

BI系统上的报表怎么导出来?附方法步骤

在BI系统上做好的数据可视化分析报表,怎么导出来给别人看?方法有二,分别是1使用报表分享功能,2使用报表导出功能。下面就以奥威BI系统为例,简明扼要地介绍这两个功能。1、报表分享功能作用:让其他同事灵活地在任意时间、终端上打开报表,获取数据分析信息,辅助数据分析决策。做法:返回首页,点击报表右上角【…】,点击【分享】。

浅谈Vue3——父子组件传值

引言Vue.js是一款流行的JavaScript框架,用于构建用户界面。它提供了一种简洁、灵活的方式来管理和渲染数据。在Vue3中,父子组件之间的数据传递是一个常见的需求。本文将介绍如何在Vue3中传递对象,并且在子组件中访问和修改父组件对象中的属性值。传递对象到子组件在Vue3中,可以通过props属性将数据从父组件

Dubbo 3.x源码(11)—Dubbo服务的发布与引用的入口

基于Dubbo3.1,详细介绍了Dubbo服务的发布与引用的入口的源码。此前我们学习了Dubbo配置的加载与覆盖的一系列源码:Dubbo3.x源码(7)—Dubbo配置的加载入口源码Dubbo3.x源码(8)—Dubbo配置中心的加载与优先级源码Dubbo3.x源码(9)—Dubbo启动元数据中心源码Dubbo3.x源

全网最全的接口自动化测试教程

【软件测试行业现状】2023年了你还敢学软件测试?未来已寄..测试人该何去何从?【自动化测试、测试开发、性能测试】为什么要做接口自动化相对于UI自动化而言,接口自动化具有更大的价值。为了优化转化路径或者提升用户体验,APP/web界面的按钮控件和布局几乎每个版本都会发生一次变化,导致自动化的代码频繁变更,没有起到减少工

【谢希尔 计算机网络】第3章 数据链路层

数据链路层数据链路层的地位网络中的主机、路由器等都必须实现数据链路层局域网中的主机、交换机等都必须实现数据链路层不同链路层可能采用不同的数据链路层协议数据链路层信道类型点对点信道使用一对一的点对点通信方式广播通信必须使用专用的共享系电脑协议来协调这些主机的数据发送使用点对点信道的数据链路层数据链路和帧链路(link):

BEV基础

BEV-LaneDet仿射变换与投影变换逆透视变换详解及代码实现(一)线性变换加平移变换等于仿射变换,仿射变换属于透视变换的子集。透视投影等价于中心投影,透视变换等价于中心投影变换。计算机视觉中,平面的单应性被定义为从一个平面到另一个平面的投影映射。在没有相机标定参数的情况下,可以利用物理平面和像平面中的四个对应点计算

人工智能术语翻译(三)

文章目录摘要IJKL摘要人工智能术语翻译第三部分,包括I、J、K、L开头的词汇!I英文术语中文翻译常用缩写备注I.I.D.Assumption独立同分布假设IdenticallyDistributed同分布的Identifiable可辨认的IdentityFunction恒等函数IdentityMapping恒等映射I

DragGAN使用记录

效果图调整人物动作调整裙子长度调整动物的动作DragGAN介绍DragGAN是一种基于人工智能的图像编辑工具,它可以根据用户的输入生成逼真的图像。与传统的图像编辑工具只能扭曲或裁剪现有的像素不同,DragGAN可以创建与用户意图匹配的新内容。DragGAN的原理是利用生成对抗网络(GAN)来学习和模拟真实数据的分布,然

热文推荐