vue3-test-config
Version:
Vue3项目测试环境自动配置工具
407 lines (297 loc) • 10.3 kB
Markdown
<!--
* @Author: wangchao67 wangchao67@mychery.com
* @Date: 2025-05-30 14:47:18
* @LastEditors: wangchao67
* @LastEditTime: 2025-06-09 18:50:22
* @Description: file content
-->
TestConfig 是一个专为 Vue3 + Vite 项目设计的自动化测试环境配置工具,能够快速为您的项目配置 Vitest(单元测试)和 Cypress(E2E测试)环境。支持 JavaScript 和 TypeScript,一键配置完整的测试环境。
- 🚀 **一键配置**:自动安装和配置 Vitest 和 Cypress
- 🔍 **智能检测**:自动检测项目是否使用 TypeScript
- 🌐 **多语言支持**:支持 JavaScript、TypeScript 或两者兼容
- 📁 **统一目录结构**:将所有测试文件统一放在 `test/` 目录下
- ⚙️ **完整配置**:生成完整的配置文件和示例测试
- 📦 **依赖管理**:智能检测并安装必需的依赖包
- ⚡ **Vue3 优化**:专门针对 Vue3 + Vite 项目优化
- 🎭 **覆盖率报告**:自动配置代码覆盖率收集
- 🎨 **UI 界面**:支持 Vitest UI 可视化测试界面
- Node.js >= 16.0.0
- npm >= 7.0.0 或 yarn >= 1.22.0
- Vue 3 项目
- Vite 构建工具
```bash
git clone <仓库地址>
cd testConfig
node /path/to/testConfig/index.js
```
```bash
cp -r testConfig /path/to/your/vue3-project/
cd /path/to/your/vue3-project
node testConfig/index.js
```
```bash
node index.js
node index.js <项目路径>
node index.js ./vueDemo
```
运行脚本后,工具会自动检测您的项目环境并提供选择:
```
🔍 检测到项目使用: TypeScript
📍 项目路径: /path/to/your/project
🤔 请选择测试脚本的语言支持:
1. JavaScript 脚本
2. TypeScript 脚本
3. 同时支持 JavaScript 和 TypeScript
请选择 (1/2/3):
```
配置完成后,工具会创建以下目录结构:
```
your-project/
├── test/
│ ├── unit/
│ │ ├── components/
│ │ │ └── Demo.spec.ts
│ │ └── utils/
│ └── e2e/
│ ├── specs/
│ │ └── example.cy.ts
│ ├── fixtures/
│ └── support/
│ ├── commands.ts
│ └── e2e.ts
├── vitest.config.ts
├── cypress.config.ts
└── package.json
```
为了避免parseAstAsync错误和版本冲突,工具会自动安装以下版本的依赖:
```json
{
"vitest": "^3.2.2",
"@vue/test-utils": "^2.4.0",
"jsdom": "^24.1.0",
"@vitest/coverage-v8": "^3.2.2",
"@vitest/ui": "^3.2.2"
}
```
```json
{
"cypress": "latest"
}
```
> **版本控制策略**:
> - 所有 Vitest 相关包使用相同的主版本号(1.6.x)
> - 使用 `^` 版本范围,允许兼容的小版本更新
> - 避免不同包依赖不兼容的 Vitest 版本
> **测试环境选择**:
> - 使用 `jsdom` 替代 `happy-dom`,提供更好的 ES 模块兼容性
> - 避免在 ES 模块环境中的 `__dirname` 未定义错误
> - 与 Vue 3 + Vite 项目完全兼容
配置完成后,`package.json` 中会自动添加以下脚本:
```json
{
"scripts": {
"test": "vitest",
"test:ui": "vitest --ui",
"test:run": "vitest run",
"test:coverage": "vitest run --coverage",
"test:e2e": "cypress open",
"test:e2e:headless": "cypress run"
}
}
```
配置完成后,您可以使用以下命令:
```bash
npm run test
npm run test:ui
npm run test:run
npm run test:coverage
npm run test:e2e
npm run test:e2e:headless
```
如果遇到以下错误:
```
The requested module 'vitest/node' does not provide an export named 'parseAstAsync'
```
**原因分析**:
- 项目中存在多个不兼容的vitest版本
- 某些工具期望更高版本的vitest,但项目使用的是低版本
**自动处理机制**:
TestConfig工具会自动检测并处理这个问题:
1. **版本冲突检测**:自动检查现有vitest相关包的版本
2. **智能卸载**:自动卸载冲突的低版本包
3. **统一安装**:安装vitest@3.2.2及其配套包
**手动解决步骤**(如果自动处理失败):
```bash
npm uninstall vitest @vitest/ui @vitest/coverage-v8
npm cache clean --force
node testConfig/index.js
npm install -D vitest@^3.2.2 @vitest/ui@^3.2.2 @vitest/coverage-v8@^3.2.2
```
TestConfig工具采用以下策略避免版本冲突:
- ✅ **统一版本**:所有vitest相关包使用相同主版本号(3.2.2)
- ✅ **冲突检测**:自动检测并卸载不兼容的旧版本
- ✅ **智能安装**:确保所有依赖包版本兼容
- ✅ **环境验证**:安装后验证配置的正确性
```typescript
import { describe, it, expect } from 'vitest'
import { mount } from '@vue/test-utils'
import { createApp } from 'vue'
// 示例组件测试
describe('Vue Component Tests', () => {
it('应该正确创建 Vue 应用实例', () => {
const app = createApp({})
expect(app).toBeDefined()
})
// 更多测试示例...
})
```
```typescript
describe('应用基本功能测试', () => {
beforeEach(() => {
cy.visit('/')
})
it('应该正确显示首页', () => {
cy.contains('Welcome')
cy.get('[data-testid="app"]').should('be.visible')
})
// 更多测试示例...
})
```
工具会生成针对 Vue3 优化的 Vitest 配置:
- 支持 Vue SFC 组件
- 配置 jsdom 测试环境
- 设置覆盖率收集
- 配置 UI 界面
- 设置测试文件匹配规则
生成的 Cypress 配置包含:
- E2E 测试配置
- 视频录制设置
- 屏幕截图配置
- 自定义命令支持
1. **权限错误**
```bash
chmod +x index.js
```
2. **Node.js 版本过低**
```bash
node --version
```
3. **包安装失败**
```bash
npm cache clean --force
rm -rf node_modules package-lock.json
npm install
```
4. **TypeScript 类型错误**
确保项目已安装 TypeScript:
```bash
npm install -D typescript
```
5. **Vitest 版本冲突(重要)**
**问题现象**:
```
The requested module 'vitest/node' does not provide an export named 'parseAstAsync'
vitest@1.6.1 invalid: "3.2.2" from node_modules/@vitest/coverage-v8
```
**预防措施**:
- ✅ 工具已自动指定兼容版本:`vitest@^1.6.0`、`@vitest/ui@^1.6.0`、`@vitest/coverage-v8@^1.6.0`
- ✅ 所有相关包使用相同的主版本号
**如果仍遇到版本冲突**:
```bash
npm list vitest
npm uninstall vitest @vitest/ui @vitest/coverage-v8
rm -rf node_modules package-lock.json
npm install
node testConfig/index.js
```
6. **ES 模块兼容性错误**
**问题现象**:
```
ReferenceError: __dirname is not defined
This might cause false positive tests.
```
**解决方案**:
- ✅ 工具已自动使用 `jsdom` 环境替代 `happy-dom`
- ✅ 提供更好的 ES 模块兼容性
**如果仍遇到问题**:
```bash
```
如果需要重新配置,可以删除生成的文件:
```bash
rm -rf test/
rm vitest.config.ts cypress.config.ts
```
如果您需要重新配置测试环境:
1. 确保先清理之前的配置(可选)
2. 重新运行配置脚本
3. 工具会检测已存在的文件并询问是否覆盖
欢迎提交 Issue 和 Pull Request 来改进这个工具!
MIT License
如果您在使用过程中遇到问题,请:
1. 检查控制台输出的错误信息
2. 确认 Node.js 和 npm 版本
3. 查看项目是否为有效的 Vue3 项目
4. 提交 Issue 描述问题详情
---
**享受测试驱动开发的乐趣!🎉**