UNPKG

vue3-test-config

Version:
407 lines (297 loc) 10.3 kB
<!-- * @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 测试环境自动配置工具 ## 🎯 项目介绍 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 # 在你的 Vue3 项目根目录运行 node /path/to/testConfig/index.js ``` ### 方式二:复制到项目中 ```bash # 将 testConfig 文件夹复制到你的项目根目录 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 <项目路径> # 示例:为 vueDemo 项目配置测试环境 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/ # E2E 测试目录 │ ├── specs/ # 测试规范 │ │ └── example.cy.ts # 示例 E2E 测试 │ ├── fixtures/ # 测试数据 │ └── support/ # 支持文件 │ ├── commands.ts # 自定义命令 │ └── e2e.ts # 全局配置 ├── vitest.config.ts # Vitest 配置文件 ├── cypress.config.ts # Cypress 配置文件 └── package.json # 更新的包配置 ``` ## 🔧 自动安装的依赖 ### Vitest 相关依赖(3.2.2版本) 为了避免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" } ``` ### Cypress 相关依赖 ```json { "cypress": "latest" } ``` > **版本控制策略**: > - 所有 Vitest 相关包使用相同的主版本号(1.6.x) > - 使用 `^` 版本范围,允许兼容的小版本更新 > - 避免不同包依赖不兼容的 Vitest 版本 > **测试环境选择**: > - 使用 `jsdom` 替代 `happy-dom`,提供更好的 ES 模块兼容性 > - 避免在 ES 模块环境中的 `__dirname` 未定义错误 > - 与 Vue 3 + Vite 项目完全兼容 ## 📜 自动添加的 NPM 脚本 配置完成后,`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 # 运行单元测试(UI界面) npm run test:ui # 运行单元测试(单次运行) npm run test:run # 运行单元测试并生成覆盖率报告 npm run test:coverage # 打开 Cypress E2E 测试界面 npm run test:e2e # 运行 E2E 测试(无头模式) npm run test:e2e:headless ``` ## 🚨 故障排除 ### parseAstAsync 错误处理 如果遇到以下错误: ``` The requested module 'vitest/node' does not provide an export named 'parseAstAsync' ``` **原因分析**: - 项目中存在多个不兼容的vitest版本 - 某些工具期望更高版本的vitest,但项目使用的是低版本 **自动处理机制**: TestConfig工具会自动检测并处理这个问题: 1. **版本冲突检测**:自动检查现有vitest相关包的版本 2. **智能卸载**:自动卸载冲突的低版本包 3. **统一安装**:安装vitest@3.2.2及其配套包 **手动解决步骤**(如果自动处理失败): ```bash # 1. 卸载所有vitest相关包 npm uninstall vitest @vitest/ui @vitest/coverage-v8 # 2. 清理缓存 npm cache clean --force # 3. 重新运行TestConfig工具 node testConfig/index.js # 4. 或手动安装3.2.2版本 npm install -D vitest@^3.2.2 @vitest/ui@^3.2.2 @vitest/coverage-v8@^3.2.2 ``` ### 版本控制预防措施 TestConfig工具采用以下策略避免版本冲突: - ✅ **统一版本**:所有vitest相关包使用相同主版本号(3.2.2) - ✅ **冲突检测**:自动检测并卸载不兼容的旧版本 - ✅ **智能安装**:确保所有依赖包版本兼容 - ✅ **环境验证**:安装后验证配置的正确性 ## 📋 生成的示例测试 ### 单元测试示例 (TypeScript) ```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() }) // 更多测试示例... }) ``` ### E2E 测试示例 (TypeScript) ```typescript describe('应用基本功能测试', () => { beforeEach(() => { cy.visit('/') }) it('应该正确显示首页', () => { cy.contains('Welcome') cy.get('[data-testid="app"]').should('be.visible') }) // 更多测试示例... }) ``` ## ⚙️ 配置文件 ### Vitest 配置 (vitest.config.ts) 工具会生成针对 Vue3 优化的 Vitest 配置: - 支持 Vue SFC 组件 - 配置 jsdom 测试环境 - 设置覆盖率收集 - 配置 UI 界面 - 设置测试文件匹配规则 ### Cypress 配置 (cypress.config.ts) 生成的 Cypress 配置包含: - E2E 测试配置 - 视频录制设置 - 屏幕截图配置 - 自定义命令支持 ## 🛠️ 故障排除 ### 常见问题 1. **权限错误** ```bash # 确保有写入权限 chmod +x index.js ``` 2. **Node.js 版本过低** ```bash # 升级 Node.js 到 16+ 版本 node --version ``` 3. **包安装失败** ```bash # 清理 npm 缓存 npm cache clean --force # 删除 node_modules 重新安装 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 # 1. 检查版本冲突 npm list vitest # 2. 清理并重新安装(如有需要) npm uninstall vitest @vitest/ui @vitest/coverage-v8 rm -rf node_modules package-lock.json npm install # 3. 重新运行配置工具 node testConfig/index.js ``` 6. **ES 模块兼容性错误** **问题现象**: ``` ReferenceError: __dirname is not defined This might cause false positive tests. ``` **解决方案**: - ✅ 工具已自动使用 `jsdom` 环境替代 `happy-dom` - ✅ 提供更好的 ES 模块兼容性 **如果仍遇到问题**: ```bash # 检查 vitest.config.js 中的环境配置 # 确保使用:environment: 'jsdom' ``` ### 手动清理 如果需要重新配置,可以删除生成的文件: ```bash # 删除测试目录 rm -rf test/ # 删除配置文件 rm vitest.config.ts cypress.config.ts # 手动从 package.json 中移除测试脚本 ``` ## 🔄 重新运行 如果您需要重新配置测试环境: 1. 确保先清理之前的配置(可选) 2. 重新运行配置脚本 3. 工具会检测已存在的文件并询问是否覆盖 ## 🤝 贡献 欢迎提交 Issue 和 Pull Request 来改进这个工具! ## 📄 许可证 MIT License ## 📞 支持 如果您在使用过程中遇到问题,请: 1. 检查控制台输出的错误信息 2. 确认 Node.js 和 npm 版本 3. 查看项目是否为有效的 Vue3 项目 4. 提交 Issue 描述问题详情 --- **享受测试驱动开发的乐趣!🎉**