当前位置: 首页 > news >正文

从0搭建Vue3组件库(十二):引入现代前端测试框架 Vitest

Vitest 是个高性能的前端单元测试框架,它的用法其实和 Jest 差不多,但是它的性能要优于 Jest 不少,还提供了很好的 ESM 支持,同时对于使用 vite 作为构建工具的项目来说有一个好处就是可以公用同一个配置文件vite.config.js。因此本项目将会使用 Vitest 作为测试框架。

安装

因为我们测试的前端组件库是运行在浏览器上的,所以我们需要额外安装happy-dom,同时我们还需要安装展示测试覆盖率工具c8

pnpm add vitest happy-dom c8 -D -w

配置

上面提到过,Vitest 的配置可以直接在vite.config.ts中配置,所以我们来到components/vite.config.ts中对 Vitest 做一个相关配置(三斜线命令告诉编译器在编译过程中要引入的额外的文件)

/// <reference types="vitest" />
import { defineConfig } from "vite";
import vue from "@vitejs/plugin-vue"
...
export default defineConfig({...test: {environment: "happy-dom"},}
)

然后我们在package.json中增加两个命令vitestvitest run --coverage,分别是进行单元测试和查看单元测试覆盖情况

 "scripts": {"test": "vitest","coverage": "vitest run --coverage"}

此时我们便可以使用 Vitest 进行测试了,在执行test命令时,Vitest 会执行**/.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx}的文件,这里我们的测试文件统一命名为**/.{test}.ts的形式并放在每个组件的__tests__目录下
比如在 button 目录下新建__tests__/button.test.ts目录,然后写一个简单的测试代码看一下效果如何

import { describe, expect, it } from 'vitest';describe('helloeasyest', () => {it('should be helloeasyest', () => {expect('hello' + 'easyest').toBe('helloeasyest');});
});

然后在components目录下执行pnpm run test就可以看到我们的测试通过了
在这里插入图片描述
然后执行pnpm run coverage可以看到我们测试覆盖情况在这里插入图片描述
其中它们每个字段代表的含义如下

  • %stmts 是语句覆盖率(statement coverage):是不是每个语句都执行了?

  • %Branch 分支覆盖率(branch coverage):是不是每个 if 代码块都执行了?

  • %Funcs 函数覆盖率(function coverage):是不是每个函数都调用了?

  • %Lines 行覆盖率(line coverage):是不是每一行都执行了?

如何测试组件?

上面我们只是简单测试了一个字符串相加,但是我们需要测试的是组件库,那么如何测试我们的组件是否复合要求呢?
因为我们项目是 vue 组件库,因此我们可以安装 Vue 推荐的测试库@vue/test-utils

pnpm add @vue/test-utils -D -w

然后我们修改一下button.test.ts,我们来测试一下 Button 组件的 slot

import { describe, expect, it } from 'vitest';import { mount } from '@vue/test-utils';
import button from '../button.vue';
// The component to test
describe('test button', () => {it('should render slot', () => {const wrapper = mount(button, {slots: {default: 'easyest'}});// Assert the rendered text of the componentexpect(wrapper.text()).toContain('easyest');});
});

@vue/test-utils提供了一个mount方法,我们可以传入不同参数来测试组件是否复合我们的预期,比如上面测试代码的含义是:传入 button 组件,并将其默认 slot 设置为easyest,我们期望页面加载的时候文本会展示easyest,很显然我们的 button 组件是有这个功能的,所以我们执行pnpm run test的时候这条测试就通过了
在这里插入图片描述
如果我们想测试 Button 组件传入 type 展示某个样式的时候可以这样写

import { describe, expect, it } from 'vitest';import { mount } from '@vue/test-utils';
import button from '../button.vue';
// The component to test
describe('test button', () => {it('should render slot', () => {const wrapper = mount(button, {slots: {default: 'easyest'}});// Assert the rendered text of the componentexpect(wrapper.text()).toContain('easyest');});it('should have class', () => {const wrapper = mount(button, {props: {type: 'primary'}});expect(wrapper.classes()).toContain('ea-button--primary');});
});

这条测试的含义是:当我们传入的type为primary的时候,期望组件的类名为ea-button–primary,很显然这条也是可以通过的,同时这时候你会发现我们刚刚启动的测试自己自动更新了,说明Vitest是具有热更新功能的

在这里插入图片描述
关于@vue/test-utils更多功能感兴趣的可以点击@vue/test-utils查看官方文档

相关文章:

从0搭建Vue3组件库(十二):引入现代前端测试框架 Vitest

Vitest 是个高性能的前端单元测试框架,它的用法其实和 Jest 差不多,但是它的性能要优于 Jest 不少,还提供了很好的 ESM 支持,同时对于使用 vite 作为构建工具的项目来说有一个好处就是可以公用同一个配置文件vite.config.js。因此本项目将会使用 Vitest 作为测试框架。 安装 …...

使用Handler创建一个Android秒表应用

本文所有代码都放在以下链接中&#xff1a;https://github.com/MADMAX110/Stopwatch 0、应用是一个有活动、布局和其他资源组成的集合。其中一个活动是应用的主活动。每个应用都有一个主活动&#xff0c;在文件AndroidManifest.xml中指定。 1、默认地&#xff0c;每个应用都在…...

node-sass安装失败解决方法总结

node-sass 安装失败的原因 npm 安装 node-sass 依赖时&#xff0c;会从 github.com 上下载 .node 文件。由于国内网络环境的问题&#xff0c;这个下载时间可能会很长&#xff0c;甚至导致超时失败。 解决方法一&#xff1a;使用淘宝镜像源&#xff08;推荐&#xff09; npm …...

C++特殊类设计

文章目录 1.设计一个类&#xff0c;不能被拷贝2.设计一个类&#xff0c;只能在堆上创建对象3.设计一个类&#xff0c;只能在栈上创建对象4.设计一个类&#xff0c;不能被继承5.设计一个类&#xff0c;只能创建一个对象5.1 单例模式5.2 饿汉模式5.3 懒汉模式5.4 两种模式的析构函…...

常用的python gpu加速方法

在使用 PyCharm进行机器学习的时候&#xff0c;我们常常需要自己创建一些函数&#xff0c;这个过程中可能会浪费一些时间&#xff0c;在这里&#xff0c;我们为大家整理了一些常用的 Python加速方法&#xff0c;希望能给大家带来帮助。 在 Python中&#xff0c;我们经常需要创建…...

SpringCloud-Gateway

什么是网关&#xff1f; 网关是一个服务&#xff0c;是访问内部系统的唯一入口&#xff0c;提供内部服务的路由中转&#xff0c;额外还可以在此基础上提供如身份验证、监控、负载均衡、限流、降级与应用检测等功能。 Spring Cloud Gateway 与 Zuul 对比 zuul1.x与zuul2.x Zu…...

【C++ qt4】操作json学习笔记

本博文源于笔者在学习c qt4操作json文件&#xff0c;qt4不支持json&#xff0c;里面的函数是json.h与jsoncpp.cpp我已经附在文末&#xff0c;大家可复制重命名用&#xff0c;里面的案例可以自己拿来敲或者直接copy也行.,一定利用好目录拖动&#xff0c;不然很长。 文章目录 1.从…...

【牛客刷题专栏】0x25:JZ24 反转链表(C语言编程题)

前言 个人推荐在牛客网刷题(点击可以跳转)&#xff0c;它登陆后会保存刷题记录进度&#xff0c;重新登录时写过的题目代码不会丢失。个人刷题练习系列专栏&#xff1a;个人CSDN牛客刷题专栏。 题目来自&#xff1a;牛客/题库 / 在线编程 / 剑指offer&#xff1a; 目录 前言问…...

useEffect

useEffect 1.依赖项是什么&#xff1f;2.useEffect怎么知道依赖项数组发生了改变&#xff1f;3.依赖项的改变会导致无限渲染吗&#xff1f;4.使用 Object.is 来比较新/旧 state 是否相等&#xff0c;浅比较&#xff1f;5.为什么要用浅比较&#xff0c;而不用深比较呢&#xff1…...

如何利用splice()和slice()方法操作数组

如何利用splice&#xff08;&#xff09;和slice&#xff08;&#xff09;方法操作数组 前言splice()是什么&#xff0c;有什么用&#xff1f;怎么用&#xff1f;slice()是什么&#xff0c;有什么用&#xff1f;怎么用&#xff1f;splice和slice方法的区别小结 前言 splice&am…...

一文读懂ChatGPT(全文由ChatGPT撰写)

最近ChatGPT爆火&#xff0c;相信大家或多或少都听说过ChatGPT。到底ChatGPT是什么&#xff1f;有什么优缺点呢&#xff1f; 今天就由ChatGPT自己来给大家答疑解惑~ 全文文案来自ChatGPT&#xff01; 01 ChatGPT是什么 ChatGPT是一种基于人工智能技术的自然语言处理系统&…...

如何提升应届生职场竞争力

引言 对于应届毕业生来说&#xff0c;进入职场是既令人兴奋又具有挑战性的。面对竞争激烈的就业市场&#xff0c;提高自身的职场竞争力对于应届生来说尤为重要。本文旨在为应届生提供有价值的见解和实用的策略&#xff0c;帮助他们提升职场竞争力&#xff0c;增加在就业市场中的…...

David Silver Lecture 5: Model-Free Control

1 Introduction 1.1 内容 上一章是对一个unknown MDP进行value function的预测&#xff0c;相当于policy evaluation。这一章是对unknown MDP找到一个最优的policy&#xff0c; optimise value function. 1.2 On and Off-Policy Learning On-policy learning learn on the…...

MySQL-----事务管理

文章目录 前言一、什么是事务二、为什么会出现事务三、事物的版本支持四、事物的提交方式五、事务常见的操作方式六、事务隔离级别如何理解隔离性1隔离级别查看与设置隔离性读未提交【Read Uncommitted】读提交【Read Committed】可重复读【Repeatable Read】串行化【serializa…...

chatGPT润色中英论文软件-文章修改润色器

chatGPT可以润色英文论文吗&#xff1f; ChatGPT可以润色英文论文&#xff0c;它具备自动纠错、自动完善语法和严格全面的语法、句法和内容结构检查等功能&#xff0c;可以对英文论文进行高质量的润色和优化。此外&#xff0c;ChatGPT还支持学术翻译润色、查重及语言改写等服务…...

MacOS下安装和配置Nginx

一、安装brew /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"按回车后&#xff0c;根据提示操作&#xff1a;输入镜像序号 --> 输入Y&#xff0c;回车等待brew安装完成即可。 在终端输入brew -v后&#xff0c;会提示…...

采用UWB(超宽频)技术开发的java版智慧工厂定位系统源码

室内定位系统源码&#xff0c;采用UWB定位技术开发的智慧工厂定位系统源码 技术架构&#xff1a;单体服务 硬件&#xff08;UWB定位基站、卡牌&#xff09; 开发语言&#xff1a;java 开发工具&#xff1a;idea 、VS Code 前端框架&#xff1a;vue 后端框架&#xff1a;s…...

【2023华为OD笔试必会20题--C语言版】《04 日志采集系统》——数组

本专栏收录了华为OD 2022 Q4和2023Q1笔试题目,100分类别中的出现频率最高(至少出现100次)的20道,每篇文章包括原始题目 和 我亲自编写并在Visual Studio中运行成功的C语言代码。 仅供参考、启发使用,切不可照搬、照抄,查重倒是可以过,但后面的技术面试还是会暴露的。✨✨…...

MySQL数据库——MySQL修改存储过程(ALTER PROCEDURE)

在实际开发过程中&#xff0c;业务需求修改的情况时有发生&#xff0c;所以修改 MySQL 中的存储过程是不可避免的。 MySQL 中通过 ALTER PROCEDURE 语句来修改存储过程。下面将详细讲解修改存储过程的方法。 MySQL 中修改存储过程的语法格式如下&#xff1a; ALTER PROCEDURE…...

ASEMI代理ADV7125JSTZ330原装ADI车规级ADV7125JSTZ330

编辑&#xff1a;ll ASEMI代理ADV7125JSTZ330原装ADI车规级ADV7125JSTZ330 型号&#xff1a;ADV7125JSTZ330 品牌&#xff1a;ADI/亚德诺 封装&#xff1a;LQFP-48 批号&#xff1a;2023 引脚数量&#xff1a;48 工作温度&#xff1a;-40C~85C 安装类型&#xff1a;表面…...

Unity安卓打包实战指南:从环境配置到APK生成全链路排错

1. 这不是“入门教程”&#xff0c;而是一份写给真实开发现场的生存指南你打开Unity&#xff0c;新建一个3D项目&#xff0c;拖进一个Cube&#xff0c;点击Play——它动了。你松了口气&#xff0c;觉得“Unity好像也没那么难”。但当你把APK打包发给测试同事&#xff0c;对方回…...

Lampiao 靶场

Lampiao 靶场完整渗透解析一、靶场环境信息攻击机&#xff08;Kali&#xff09;IP&#xff1a;192.168.146.128靶机 IP&#xff1a;192.168.146.129目标&#xff1a;获取靶机 root 权限与 flag二、步骤 1&#xff1a;信息收集&#xff08;端口与服务扫描&#xff09;nmap -p- -…...

iPaaS 应用场景深度解析:从系统孤岛到数据自由流动的六大实战路径

写在前面 一个企业的数字化程度越高&#xff0c;系统就越多。系统越多&#xff0c;集成问题就越严重。 这不是假设&#xff0c;而是我们在服务客户过程中反复验证的结论——企业数字化转型的瓶颈&#xff0c;往往不在于"造新系统"&#xff0c;而在于"连老系统&q…...

告别浪费!SolidWorks企业级共享方案,实现降本增效全攻略

还在为 SolidWorks 高昂的硬件投入和混乱的图纸管理头疼&#xff1f;告别“一人一机”的浪费模式&#xff0c;企业级共享方案才是降本增效的正解。这套攻略基于“1 台高性能服务器 云飞云共享云桌面”架构&#xff0c;帮你把硬件成本砍掉 60%&#xff0c;把软件利用率翻倍。一…...

科华UPS电源全品类汇总:选型与场景适配指南

科华UPS电源作为国内智慧电能领域的主流产品&#xff0c;覆盖家用、办公、机房、工业等全场景&#xff0c;产品系列丰富、规格齐全&#xff0c;但多数用户在选型时&#xff0c;常因分不清系列差异、功率适配、架构类型而踩坑。本文系统汇总科华UPS电源的核心分类、主流系列、核…...

Windows Cleaner深度解析:5大核心模块彻底解决系统空间不足问题

Windows Cleaner深度解析&#xff1a;5大核心模块彻底解决系统空间不足问题 【免费下载链接】WindowsCleaner Windows Cleaner——专治C盘爆红及各种不服&#xff01; 项目地址: https://gitcode.com/gh_mirrors/wi/WindowsCleaner Windows Cleaner是一款完全免费开源的…...

CentOS 8/Stream 8系统DNF换源后,安装软件还是慢?试试这几个排查命令和优化技巧

CentOS 8/Stream 8系统DNF换源后安装缓慢的深度排查与优化指南当你已经按照教程将CentOS 8/Stream 8的DNF源切换为国内镜像&#xff0c;却发现软件安装速度依然不尽如人意时&#xff0c;这种体验确实令人沮丧。作为长期使用CentOS系统的技术专家&#xff0c;我完全理解这种&quo…...

taotoken用量看板如何帮助团队精细化管理api调用成本

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 taotoken用量看板如何帮助团队精细化管理api调用成本 对于团队管理者而言&#xff0c;将大模型能力集成到产品开发或业务流程中&am…...

“--glow”并不存在?!深度逆向Midjourney 6.1源码级辉光模拟协议,曝光官方刻意隐藏的4个隐式辉光增强开关

更多请点击&#xff1a; https://kaifayun.com 第一章&#xff1a;辉光效果的视觉本质与Midjourney 6.1协议悖论 辉光&#xff08;Glow&#xff09;并非物理光源的直接投射&#xff0c;而是人眼视网膜对高对比度边缘与饱和色域交界处产生的神经光学响应——一种由局部亮度梯度…...

模拟调音台数字化改造:基于STM32与MOTU音频接口的智能控制方案

1. 项目概述&#xff1a;为老旧模拟调音台注入数字灵魂在不少社区广播电台、校园电台或是小型制作室里&#xff0c;你依然能看到那些服役了十几年甚至几十年的模拟调音台。它们皮实耐用&#xff0c;推子手感扎实&#xff0c;旋钮的阻尼感让人安心&#xff0c;但面对如今以数字文…...