从0搭建Vue3组件库:引入单元测试框架Vitest

简介: 从0搭建Vue3组件库:引入单元测试框架Vitest

image.png

Vitest旨在将自己定位为Vite项目的首选测试框架,在Vite项目中使用Vitest可以共享相同的插件和 vite.config.js。因为我们的组件库是基于Vite开发的,所以选择了Vitest作为组件库的单元测试框架。看完这篇文章你将学会如何在Vite项目中引入Vitest和编写一些测试代码,包括对Vue组件的测试。


安装与配置



安装


因为我们测试的是运行于dom上的组件库,所以我们不仅要安装vitest还有安装happy-dom(模拟Web浏览器,以便用于测试的工具)以及c8(用了展示测试覆盖率)。

pnpm add vitest happy-dom c8 -D -w


配置


我们可以在vite.config.tstest属性下进行vitest的相关配置。配置之前我们需要在文件顶部配置三斜线命令告诉编译器在编译过程中要引入的额外的文件

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

然后在package.json中添加两条命令

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


举个栗子



执行pnpm run test的时候,vitest会寻找**/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx}形式的文件。所以我们新建button.test.ts,写个简单的2+2=4的测试代码。其中

  • describe 描述, decribe会形成一个作用域
  • it 断言
  • expect 期望
import { describe, expect, it } from "vitest";
describe("two plus two is four", () => {
    it("should be 4", () => {
        expect(2 + 2).toBe(4)
    })
})

然后终端执行pnpm run test,则会出现一些结果

image.png


并且开启了热更新。


测试组件



测试slot


因为我们的项目主要是组件库,所以组件则是我们主要测试的东西。首先我们要安装Vue推荐的测试库@vue/test-utils

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

 

这个工具主要提供了一个mount方法,我们通过mount实例化一个组件,传入不同参数来测试组件是否符合我们的预期,比如我们为我们Button组件的写一段测试插槽的代码,一般组件测试文件会放在__tests__文件夹下,所以物品们在src/button/__tests__新建button.test.ts

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: 'Hello world'
            }
        })
        // Assert the rendered text of the component
        expect(wrapper.text()).toContain('Hello world')
    })
})

这段测试代码的含义是

当我们默认插槽为"Hello world"时,期望这个组件的text包含"Hello world"

然后我们执行pnpm run test,我们会发现我们Button组件的,默认slot测试通过了

image.png


测试type


如果我们要测试Button组件传入不同type展示不同样式,我们可以加一段个测试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: 'Hello world'
            }
        })
        // Assert the rendered text of the component
        expect(wrapper.text()).toContain('Hello world')
    })
    it("should have class", () => {
        const wrapper = mount(button, {
            props: {
                type: 'primary'
            }
        })
        expect(wrapper.classes()).toContain('k-button--primary')
    })
})

这段测试type代码的含义是

当我们传入的组件的type为primary,期望渲染出的组件包含'k-button--primary'的类名

然后执行pnpm run test,会发现两条测试都通过了

image.png

其中关于组件的测试方式还有许多,这里就不再一一举例了,感兴趣的可以到官网Vue Test Utils 查看


查看测试覆盖率



最后我们可以执行pnpm run coverage来查看我们测试的覆盖情况

image.png


它们的含义分别是

  • %stmts是语句覆盖率(statement coverage):是不是每个语句都执行了?
  • %Branch分支覆盖率(branch coverage):是不是每个if代码块都执行了?
  • %Funcs函数覆盖率(function coverage):是不是每个函数都调用了?
  • %Lines行覆盖率(line coverage):是不是每一行都执行了?

到这里我们组件库便完成了Vitest组件库的引入,可能未来要做的还有很多,但至少我们已经跨出了第一步。


组件库使用



如果你想直接使用组件库的话,可以点击 kittyui 获取最新组件库代码,然后执行如下操作即可

  • 安装pnpm npm i pnpm -g
  • 安装esno npm i esno -g
  • 安装所有依赖 pnpm install
  • 本地测试 进入examples文件夹执行 pnpm run dev 启动vue3项目
  • 打包 pnpm run build
  • 启动文档 pnpm run docs:dev
  • 打包文档 pnpm run docs:build
  • 启动打包后文档服务 pnpm run docs:serve
  • 执行组件库测试 pnpm run test
  • 查看测试覆盖率 pnpm run coverage


写在最后



如果你对组件库开发感兴趣的话可以关注 从零搭建Vue3组件库-专栏,后续将不断完善组件库。


相关文章
|
15天前
|
测试技术 C# 数据库
C# 单元测试框架 NUnit 一分钟浅谈
【10月更文挑战第17天】单元测试是软件开发中重要的质量保证手段,NUnit 是一个广泛使用的 .NET 单元测试框架。本文从基础到进阶介绍了 NUnit 的使用方法,包括安装、基本用法、参数化测试、异步测试等,并探讨了常见问题和易错点,旨在帮助开发者有效利用单元测试提高代码质量和开发效率。
117 64
|
2天前
|
Java 测试技术 持续交付
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
本文重点讲解如何搭建App自动化测试框架的思路,而非完整源码。主要内容包括实现目的、框架设计、环境依赖和框架的主要组成部分。适用于初学者,旨在帮助其快速掌握App自动化测试的基本技能。文中详细介绍了从需求分析到技术栈选择,再到具体模块的封装与实现,包括登录、截图、日志、测试报告和邮件服务等。同时提供了运行效果的展示,便于理解和实践。
16 4
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
|
5天前
|
测试技术 Android开发 UED
探索软件测试中的自动化框架选择
【10月更文挑战第29天】 在软件开发的复杂过程中,测试环节扮演着至关重要的角色。本文将深入探讨自动化测试框架的选择,分析不同框架的特点和适用场景,旨在为软件开发团队提供决策支持。通过对比主流自动化测试工具的优势与局限,我们将揭示如何根据项目需求和团队技能来选择最合适的自动化测试解决方案。此外,文章还将讨论自动化测试实施过程中的关键考虑因素,包括成本效益分析、维护难度和扩展性等,确保读者能够全面理解自动化测试框架选择的重要性。
20 1
|
11天前
|
监控 安全 jenkins
探索软件测试的奥秘:自动化测试框架的搭建与实践
【10月更文挑战第24天】在软件开发的海洋里,测试是确保航行安全的灯塔。本文将带领读者揭开软件测试的神秘面纱,深入探讨如何从零开始搭建一个自动化测试框架,并配以代码示例。我们将一起航行在自动化测试的浪潮之上,体验从理论到实践的转变,最终达到提高测试效率和质量的彼岸。
|
14天前
|
Web App开发 敏捷开发 存储
自动化测试框架的设计与实现
【10月更文挑战第20天】在软件开发的快节奏时代,自动化测试成为确保产品质量和提升开发效率的关键工具。本文将介绍如何设计并实现一个高效的自动化测试框架,涵盖从需求分析到框架搭建、脚本编写直至维护优化的全过程。通过实例演示,我们将探索如何利用该框架简化测试流程,提高测试覆盖率和准确性。无论你是测试新手还是资深开发者,这篇文章都将为你提供宝贵的洞见和实用的技巧。
|
3天前
|
机器学习/深度学习 自然语言处理 物联网
探索自动化测试框架的演变与未来趋势
随着软件开发行业的蓬勃发展,软件测试作为保障软件质量的重要环节,其方法和工具也在不断进化。本文将深入探讨自动化测试框架从诞生至今的发展历程,分析当前主流框架的特点和应用场景,并预测未来的发展趋势,为软件开发团队选择合适的自动化测试解决方案提供参考。
|
6天前
|
测试技术 持续交付
探索软件测试中的自动化框架:优势与挑战
【10月更文挑战第28天】 随着软件开发的快速进步,自动化测试已成为确保软件质量的关键步骤。本文将探讨自动化测试框架的优势和面临的挑战,以及如何有效地克服这些挑战。
16 0
|
26天前
|
机器学习/深度学习 并行计算 数据可视化
目标分类笔记(二): 利用PaddleClas的框架来完成多标签分类任务(从数据准备到训练测试部署的完整流程)
这篇文章介绍了如何使用PaddleClas框架完成多标签分类任务,包括数据准备、环境搭建、模型训练、预测、评估等完整流程。
71 0
目标分类笔记(二): 利用PaddleClas的框架来完成多标签分类任务(从数据准备到训练测试部署的完整流程)
|
26天前
|
机器学习/深度学习 数据采集 算法
目标分类笔记(一): 利用包含多个网络多种训练策略的框架来完成多目标分类任务(从数据准备到训练测试部署的完整流程)
这篇博客文章介绍了如何使用包含多个网络和多种训练策略的框架来完成多目标分类任务,涵盖了从数据准备到训练、测试和部署的完整流程,并提供了相关代码和配置文件。
42 0
目标分类笔记(一): 利用包含多个网络多种训练策略的框架来完成多目标分类任务(从数据准备到训练测试部署的完整流程)
|
17天前
|
测试技术 开发者
探索软件测试中的自动化测试框架
在软件开发的世界中,质量是至关重要的。为了确保软件产品的质量,软件测试扮演着不可或缺的角色。本文将深入探讨自动化测试框架的概念、重要性以及如何有效地实施它们来提高软件测试的效率和效果。我们将从自动化测试的基本概念开始,逐步深入到不同类型的自动化测试工具和框架,最后探讨如何在实际项目中选择合适的自动化测试策略。