Vitest 单测使用
📅 2026/7/23 5:39:12
👁️ 次浏览
在 Vue 3 Vite 生态中Vitest 是绝对的首选因为它与 Vite 共享配置速度极快且 API 与 Jest 高度兼容。下面是 Vitest 的完整接入指南涵盖了从「环境配置」到「实战测试含 Vue 组件测试」的全流程。一、 核心配置步骤1. 安装核心依赖除了测试框架本身还需要安装 Vue 组件测试工具和 JSDOM提供浏览器环境pnpmadd-Dvitest vue/test-utils jsdom2. 配置vite.config.ts在现有的 Vite 配置中追加test字段// vite.config.tsimport{defineConfig}fromviteimportvuefromvitejs/plugin-vueexportdefaultdefineConfig({plugins:[vue()],test:{environment:jsdom,// 模拟浏览器 DOM 环境globals:true,// 全局注入 describe, it, expect 等无需手动 import// 自动清理 mock 状态避免测试用例间相互污染clearMocks:true,},})3. 补充 TS 类型提示在tsconfig.app.json中加入vitest/globals让编辑器认识describe、expect{compilerOptions:{types:[vitest/globals]}}4. 添加测试脚本在package.json中配置运行命令{scripts:{test:vitest,test:run:vitest run}}二、 完整实战示例示例 1测试普通工具函数纯逻辑假设我们有一个简单的格式化函数// src/utils/format.tsexportfunctionformatPrice(price:number):string{return¥${price.toFixed(2)}}对应的测试文件建议放在同级目录或__tests__目录下// src/utils/__tests__/format.test.tsimport{formatPrice}from../formatdescribe(formatPrice,(){it(应该正确格式化价格,(){expect(formatPrice(100)).toBe(¥100.00)expect(formatPrice(9.9)).toBe(¥9.90)})})示例 2测试 Vue 组件结合 vue/test-utils假设我们有一个简单的按钮组件!-- src/components/BaseButton.vue -- script setup langts const emit defineEmits([click]) /script template button classbase-btn clickemit(click) slot / /button /template组件的测试用例// src/components/__tests__/BaseButton.test.tsimport{mount}fromvue/test-utilsimportBaseButtonfrom../BaseButton.vuedescribe(BaseButton,(){it(应该正确渲染插槽内容,(){constwrappermount(BaseButton,{slots:{default:点击我}})expect(wrapper.text()).toContain(点击我)})it(点击时应该触发 click 事件,async(){constwrappermount(BaseButton)awaitwrapper.trigger(click)expect(wrapper.emitted(click)).toHaveLength(1)})})示例 3测试 Pinia Store结合权限路由场景测试我们之前写的usePermissionStore// src/stores/__tests__/permission.test.tsimport{setActivePinia,createPinia}frompiniaimport{usePermissionStore}from../modules/permissiondescribe(Permission Store,(){beforeEach((){setActivePinia(createPinia())})it(admin 角色应该能看到所有路由,(){conststoreusePermissionStore()constroutesstore.generateRoutes([admin])// 验证 admin 能获取到包含 system 的路由expect(routes.some(rr.path/system)).toBe(true)})it(普通用户应该被过滤掉无权限路由,(){conststoreusePermissionStore()constroutesstore.generateRoutes([user])expect(routes.some(rr.path/system)).toBe(false)})})三、 结合 Husky 的自动化流程为了让测试真正发挥“守住代码质量”的作用我们将测试加入 Git 提交拦截中pnpmadd-Dlint-staged修改package.json{lint-staged:{*.{ts,vue}:[vitest related --run,eslint --fix,prettier --write]}} 亮点vitest related是 Vitest 的神级功能它只会运行与你本次修改的文件有关联的测试而不是全量跑测试这样在git commit时速度会非常快。四、 避坑与最佳实践测试文件命名推荐统一使用xxx.test.ts或xxx.spec.tsVitest 默认会匹配这些后缀。异步测试如果测试涉及接口请求或定时器记得使用async/await或者在it回调中返回 Promise。Mock 外部依赖在测试组件时如果组件内部调用了axios或router使用vi.mock()进行模拟避免测试变成真实的网络请求UI 可视化界面开发时可以直接运行pnpm testVitest 会启动一个 HMR 模式的终端修改代码后测试会自动重跑体验极佳。 完整工程化闭环总结Vue 3 Vite 项目已经具备了企业级的完整骨架基础架构Vite Vue 3 TS Pinia Vue Router工程规范ESLint Prettier Husky lint-staged性能与体验Element Plus 按需引入 动态权限路由质量保障Vitest 单测 自动化关联测试你可以直接基于这套底座开始开发业务了
建立一个面向海外买家的网站,第一笔花费往往是域名和服务器。购买域名花费10美元,租用一台普通配置的海外服务器一年支付120美元。完成网页搭建仅仅完成了全部工作量的百分之五。引入访客耗费大量真金白银。每月支付99美元订阅第三方软件查词,…
📅 2026/7/23 5:39:12
零基础完成git开发环境配置
一、前言
本文面向零基础读者,详细讲解git开发环境配置。
二、操作步骤与知识讲解
1.安装git(针对windows系统)
操作步骤
①打开https://git-scm.com/install/windows
②点击Git for Windows/x64 Setup(大部分情况…
📅 2026/7/23 5:39:12
每周技术面试高频题汇总(2026.07.13-2026.07.20)
基于过去一周CSDN、51CTO、掘金等技术社区的热议内容,筛选出10道高频面试题,涵盖算法、系统设计、数据库、网络四大核心领域。 一、算法类
1. 分治法核心思想与归并/快排实现
考…
📅 2026/7/23 5:38:11
趋势一:WAIC变成中国AI世界杯,模型产品合作汇聚一堂本届WAIC,展会的 "发布周期" 不断拉长,深度绑定核心展期。前几年,WAIC多为前沿技术陈列场;今年,展台与产品发布会等同步。头部AI企…
📅 2026/7/23 7:03:45
1. 项目概述:为什么今天还要深入C?最近在社区里看到不少讨论,说C是不是“过时”了,是不是该被Rust、Go这些后起之秀取代了。作为一个从C98时代一路摸爬滚打过来的老码农,我的看法是:它不仅没过时࿰…
📅 2026/7/23 7:03:45
这类标题优化需求最值得先看的不是技巧列表,而是能不能在真实搜索环境下稳定提升点击率。很多教程会直接扔给你一堆“三段式”“长尾词”规则,但实际落地时最容易卡住的是关键词选择、语句自然度和平台适配这三个环节。我更建议把优化过程拆成四步&#…
📅 2026/7/23 7:03:45
1. 学术写作的痛点与AI工具的价值写论文这事儿,从选题到发表至少得掉三把头发——这是我在高校带研究生十年最深的体会。去年指导的博士生小张,光是文献综述就返工了五次,最后一次交稿时眼里的红血丝让我想起自己当年通宵改格式的惨痛经历。直…
📅 2026/7/23 7:03:45
1. 项目概述:为什么你需要OBS WebSocket插件?如果你正在用OBS Studio做直播或者录屏,并且希望实现一些自动化操作,比如用手机遥控切换场景、用脚本自动推送弹幕到画面、或者根据游戏状态自动调整直播布局,那么你迟早会…
📅 2026/7/23 7:03:45
熬夜脸垮成麻子脸。
粉底卡粉卡到怀疑人生。
你肯定也这样。
以前我也信偏方。
敷面膜像喝水。
结果钱花了,脸没变好。
反而屏障受损。
泛红、刺痛、爆痘。
那是真的痛。后来朋友安利我geo skincare水光枪。
说是能把营养送进真皮层。
我半信半疑。
毕竟家用仪器这东西。
水太…
📅 2026/7/23 7:02:42
更多请点击:
https://intelliparadigm.com
第一章:从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表) 当AI副业主理人不再仅满足于单次服务交付,而是主动构建可复用、可裂变、可…
📅 2026/7/23 0:00:26
最近好多同行在群里问 geo s1230 到底值不值得买。说实话,这机器在二手市场挺火。但水很深,新手很容易踩雷。我干了十年设备维护,见过太多冤大头。今天不扯虚的,直接上干货。先说价格,心里得有底。目前成色不错的二手货,大概在一万二到一万五之间。如果低于八千,别犹豫,…
📅 2026/7/23 0:01:16
更多请点击:
https://codechina.net
第一章:AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析 在对2,346篇跨行业AI生成文案的A/B测试数据进行聚类分析后,我们发现࿱…
📅 2026/7/23 0:01:26
1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…
📅 2026/7/23 1:06:38
1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…
📅 2026/7/23 1:06:38
更多请点击:
https://intelliparadigm.com
第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…
📅 2026/7/23 1:06:38
目录
第一步:选对模板,省心一半
第二步:打开扫码点餐功能
开启功能按钮
桌台管理与桌码生成
第三步:个性化设计,打造品牌感
调整点餐页面
设置点餐规则 你还在让顾客站着排队点餐吗?2025年ÿ…
📅 2026/7/22 7:05:39
在业务中快速构建一个能理解私有文档、准确回答专业问题的智能助手,是很多开发团队面临的共同挑战。传统方案往往需要从零开始搭建复杂的 RAG(检索增强生成)系统,涉及文档解析、向量化、检索、大模型调用等多个环节,整…
📅 2026/7/22 17:06:14
FAE放射组学分析工具:医学影像特征探索的完整解决方案 【免费下载链接】FAE FeAture Explorer 项目地址: https://gitcode.com/gh_mirrors/fae/FAE
你是否曾经面对海量医学影像数据感到无从下手?想要从CT、MRI等影像中提取有价值的定量特征&#…
📅 2026/7/23 5:06:50