Files
qiming/qiming-vite-plugin-design-mode/test/README.md
2026-06-01 13:43:09 +08:00

186 lines
3.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 测试文档
本目录包含 `@xagi/vite-plugin-design-mode` 插件的单元测试。
## 测试结构
```
test/
├── index.test.ts # 主插件入口测试
├── core/
│ ├── serverMiddleware.test.ts # 服务器中间件测试
│ ├── astTransformer.test.ts # AST转换器测试
│ ├── codeUpdater.test.ts # 代码更新器测试
│ └── sourceMapper.test.ts # 源码映射器测试
└── utils/
└── babelHelpers.test.ts # Babel辅助函数测试
```
## 运行测试
### 运行所有测试
```bash
npm test
# 或
pnpm test
```
### 运行测试(单次运行,不监听)
```bash
npm run test:run
```
### 运行测试并生成覆盖率报告
```bash
npm run test:coverage
```
覆盖率报告将生成在 `coverage/` 目录中。
### 使用UI界面运行测试
```bash
npm run test:ui
```
这将打开一个交互式的测试UI界面。
## 测试覆盖范围
### 核心功能测试
1. **主插件入口 (`index.test.ts`)**
- 插件初始化
- 配置选项处理
- Vite hooks 集成
- 文件过滤逻辑
2. **服务器中间件 (`serverMiddleware.test.ts`)**
- 健康检查端点
- 获取源码端点
- 修改源码端点
- 错误处理
3. **AST转换器 (`astTransformer.test.ts`)**
- JSX代码转换
- 源码映射属性注入
- TypeScript支持
- 嵌套元素处理
4. **代码更新器 (`codeUpdater.test.ts`)**
- 样式更新
- 内容更新
- 文件路径处理
- 错误处理
5. **源码映射器 (`sourceMapper.test.ts`)**
- Babel插件创建
- 元素ID生成
- 位置信息注入
- 自定义属性前缀
6. **Babel辅助函数 (`babelHelpers.test.ts`)**
- React组件名识别
- JSX元素名称提取
- 属性值提取
- 位置字符串处理
## 编写新测试
### 测试文件命名
- 测试文件应以 `.test.ts``.spec.ts` 结尾
- 测试文件应放在与被测试文件相同的目录结构中
### 测试结构
```typescript
import { describe, it, expect, vi, beforeEach } from 'vitest';
import { functionToTest } from '../../src/module';
describe('模块名称', () => {
beforeEach(() => {
// 每个测试前的设置
vi.clearAllMocks();
});
describe('功能描述', () => {
it('应该执行预期行为', () => {
// 测试代码
expect(result).toBe(expected);
});
});
});
```
### Mock使用
使用 Vitest 的 `vi.mock()` 来模拟依赖:
```typescript
vi.mock('fs', () => {
return {
readFileSync: vi.fn(),
writeFileSync: vi.fn(),
};
});
```
### 异步测试
使用 `async/await` 处理异步操作:
```typescript
it('应该处理异步操作', async () => {
const result = await asyncFunction();
expect(result).toBeDefined();
});
```
## 测试最佳实践
1. **测试隔离**: 每个测试应该独立运行,不依赖其他测试的状态
2. **清晰命名**: 测试描述应该清楚地说明测试的目的
3. **覆盖边界情况**: 测试正常流程、错误情况和边界条件
4. **Mock外部依赖**: 使用Mock来隔离被测试的代码
5. **保持测试简单**: 每个测试应该只测试一个功能点
6. **使用描述性的断言**: 使用有意义的错误消息
## 持续集成
测试可以在CI/CD流程中自动运行
```yaml
# GitHub Actions 示例
- name: Run tests
run: npm run test:run
- name: Generate coverage
run: npm run test:coverage
```
## 故障排除
### 测试失败
1. 检查测试环境是否正确配置
2. 确认所有依赖已安装
3. 查看测试输出中的错误信息
4. 检查Mock是否正确设置
### 覆盖率低
1. 检查是否有未测试的代码路径
2. 添加更多边界情况测试
3. 确保所有公共API都有测试覆盖
## 相关资源
- [Vitest 文档](https://vitest.dev/)
- [Testing Library](https://testing-library.com/)
- [Jest 迁移指南](https://vitest.dev/guide/migration.html)