Vue3 + Vitest 浏览器测试 从零开发指南

一、我们要做什么?

  1. 写一个 Vue3 计数器组件(显示名字 + 点按钮数字+1)
  2. Vitest 自动化测试(让电脑自动验证功能是否正确)
  3. 全程不用弹浏览器,在终端就能看到测试结果 ✅

二、准备工作(只需要 1 个软件)

安装 Node.js (一路下一步)

https://nodejs.org/

安装完打开 VS Code 终端,输入检查:

bash 复制代码
node -v
npm -v

出现版本号 = 成功!


三、第一步:创建项目

1. 新建文件夹

名字叫:vue-vitest-demo

2. VS Code 打开文件夹

文件 → 打开文件夹 → 选择你创建的文件夹

3. 打开终端

顶部 → 查看 → 终端

4. 初始化项目

bash 复制代码
npm init -y

执行完会生成 package.json(项目配置文件)


四、第二步:安装所有依赖(直接复制运行)

运行这条命令,安装所有需要的工具

bash 复制代码
npm install -D vitest @vue/test-utils jsdom @vitejs/plugin-vue typescript vue

安装完成后,你的 package.json 里会出现这些依赖。


五、第三步:创建项目文件结构

你的项目必须长成下面这样,不能错

复制代码
vue-vitest-demo/
├─ src/
│   └─ HelloWorld.vue       (组件)
│   └─ HelloWorld.spec.ts   (测试文件)
├─ vitest.config.ts         (测试配置)
├─ tsconfig.json            (TS配置)
├─ vue.shim.d.ts            (TS识别Vue)
└─ package.json             

六、第四步:复制代码(全部给你准备好了)

1. src/HelloWorld.vue(组件)

vue 复制代码
<script setup lang="ts">
// 导入Vue响应式功能
import { ref } from 'vue'

// 定义组件接收的参数:必须传name,是字符串
defineProps<{
  name: string
}>()

// 定义响应式数字count,默认值1
const count = ref(1)
</script>

<template>
  <div>
    <!-- 展示名字和计数器 -->
    <h1>Hello {{ name }} x{{ count }}!</h1>
    <!-- 点击按钮,count+1 -->
    <button @click="count++">Increment</button>
  </div>
</template>

2. src/HelloWorld.spec.ts(测试文件)

ts 复制代码
import { expect, test } from 'vitest'
import { mount } from '@vue/test-utils'
import HelloWorld from './HelloWorld.vue'

test('renders name and the counter', async () => {
  // 挂载组件,传入 name 属性
  const wrapper = mount(HelloWorld, {
    props: { name: 'Vitest' },
  })

  // 检查页面是否显示 Hello Vitest
  expect(wrapper.text()).toContain('Hello Vitest')

  // 模拟点击按钮
  await wrapper.find('button').trigger('click')

  // 检查点击后数字变成 2
  expect(wrapper.text()).toContain('2')
})

3. vitest.config.ts(测试配置)

ts 复制代码
import { defineConfig } from 'vitest/config'
import vue from '@vitejs/plugin-vue'

export default defineConfig({
  plugins: [vue()],
  test: {
    environment: 'jsdom',
  },
})

4. tsconfig.json(TypeScript 配置)

json 复制代码
{
  "compilerOptions": {
    "target": "ESNext",
    "lib": ["esnext", "dom"],
    "module": "ESNext",
    "moduleResolution": "Bundler",
    "strict": true,
    "declaration": true,
    "noEmit": true,
    "esModuleInterop": true,
    "skipLibCheck": true
  }
}

5. vue.shim.d.ts(让 TS 认识 Vue 文件)

ts 复制代码
declare module "*.vue" {
  import type { DefineComponent } from "vue";
  const component: DefineComponent<{}, {}, any>;
  export default component;
}

6. package.json(添加测试命令)

找到 "scripts",改成:

json 复制代码
"scripts": {
  "test": "vitest"
}

七、第五步:运行测试!见证成功

在终端输入:

bash 复制代码
npm run test

你会看到:

复制代码
RERUN  src/HelloWorld.spec.ts x1 

 ✓ src/HelloWorld.spec.ts (1 test) 26ms
   ✓ renders name and the counter 25ms

Test Files  1 passed
     Tests  1 passed

全部跑通!


八、每一步我们干了什么?

1. HelloWorld.vue

写了一个页面组件

  • 接收名字 name
  • 显示 Hello xxx x1!
  • 点击按钮数字 +1

2. HelloWorld.spec.ts

写了一个自动测试脚本

  • 自动加载组件
  • 自动检查文字是否正确
  • 自动点击按钮
  • 自动检查数字是否变成 2

3. 配置文件

TypeScript + Vitest + Vue 能一起工作。

4. 运行测试

电脑自动帮你测试功能,不用你手动点页面!



九、常见问题

2. TS 报红?

  • 检查 vue.shim.d.ts 是否创建
  • 检查 tsconfig.json 是否正确

3. 命令报错?

  • 重新运行安装命令:
bash 复制代码
npm install

ps:https://cn.vitest.dev/
https://github.com/vitest-tests
https://changweihua.github.io/zh-CN/blog/2025-09/vue-vitest.html
https://betterstack.com/community/guides/testing/vitest-explained/

相关推荐
狂师9 分钟前
比 Playwright 更给力,推荐一个AI Agent的浏览器自动化开源项目!
前端·开源·测试
IT_陈寒18 分钟前
React hooks 闭包陷阱把我的状态吃掉了,原来问题出在这里
前端·人工智能·后端
壹方秘境19 分钟前
使用ApiCatcher在 iOS 上像修改 hosts 一样自定义域名解析
前端·后端·客户端
柳杉41 分钟前
可视化大屏设计器脚手架:从设计到交付的一站式方案
前端·three.js·数据可视化
铁皮饭盒1 小时前
3行代码搞定页面截图,Bun.WebView真的简单
javascript
kyriewen14 小时前
我手写了一个 EventEmitter,面试官追问了 6 个问题——第 4 个我没答上来
前端·javascript·面试
IT_陈寒14 小时前
Java的Date类又坑了我一次,改用时间戳真香
前端·人工智能·后端
山河木马15 小时前
矩阵专题2-怎么创建视图矩阵(uViewMatrix)
javascript·webgl·计算机图形学
小林攻城狮15 小时前
使用 Transport 节流解决 Vercel AI SDK 流式渲染卡死问题
前端·react.js
前端缘梦15 小时前
告别 TS 运行时类型漏洞!Zod 完整入门实战教程(前端 / 全栈必备)
前端·react.js·全栈