auto-request
Version:
通过Yapi JSON Schema生成接口Axios或Taro接口
233 lines (171 loc) • 6.29 kB
Markdown
# 测试用例说明
本目录包含了 auto-request 项目的测试用例,分为开发模式和构建模式两种。
## 目录结构
```
tests/
├── base/ # 统一配置管理
│ ├── configs.js # 配置文件(所有测试共用)
│ └── README.md # 配置说明文档
├── dev/ # 开发模式测试(从 src 导入)
│ ├── all-api.ts
│ ├── kae.ts
│ ├── open.ts
│ └── usercenter.ts
├── build/ # 构建模式测试(从 dist 导入)
│ ├── all-api.js
│ ├── kae.js
│ ├── open.js
│ └── usercenter.js
└── snapshots/ # 快照基准文件
└── before/
```
## 测试模式
### 1. 开发模式测试 (tests/dev)
- **测试文件**: TypeScript (`.ts`)
- **导入源**: 从 `../../src/index` 导入
- **运行方式**: 使用 Babel 转译后运行
- **用途**: 开发过程中验证源码功能
```bash
# 运行开发模式测试
yarn dev:test
# 或
node scripts/run-tests.js
```
### 2. 构建模式测试 (tests/build)
- **测试文件**: JavaScript (`.js`),使用 CommonJS 格式
- **导入源**: 从 `../../dist/bundle` 导入
- **运行方式**: 直接使用 Node.js 运行
- **用途**: 验证构建产物的正确性
```bash
# 运行构建模式测试
yarn build:test
# 或
node scripts/run-tests.js --built
```
## 统一配置管理
所有测试用例的配置统一在 `tests/base/configs.js` 中管理,确保:
✅ **配置一致性**:`dev` 和 `build` 测试使用完全相同的配置
✅ **易于维护**:修改配置只需在一处修改
✅ **简单高效**:一个配置文件,所有测试共用
配置示例:
```javascript
// tests/base/configs.js
const allApiConfig = {
filename: 'all-api',
isTypeScript: true,
loggerFileName: 'all-api.json',
skipPrompt: true,
};
```
使用配置(TypeScript 和 JavaScript 都用 `require`):
```typescript
// tests/dev/all-api.ts 或 tests/build/all-api.js
const { allApiConfig, getConfig } = require('./../base/configs');
const config = getConfig(allApiConfig, {
loggerPath: path.join(__dirname, './logs/'),
});
```
## 测试用例
每个测试用例对应一个 Swagger 示例项目,配置由 `tests/base/configs` 统一管理:
1. **all-api**: 大型项目测试,206 个接口,TypeScript 模式
2. **kae**: KAE 项目测试,57 个接口,TypeScript 模式,包含快照
3. **open**: 中型项目测试,44 个接口,JavaScript 模式,包含快照
4. **usercenter**: 小型项目测试,3 个接口,JavaScript 模式,包含快照
## Swagger 数据源
所有测试用例共享 `example` 目录中的 Swagger JSON 文件:
- `example/all-api/swagger.json`
- `example/kae/swagger.json`
- `example/open/swagger.json`
- `example/usercenter/swagger.json`
## 生成输出
测试用例生成的 API 文件统一输出到对应的 `example` 目录下:
- `example/all-api/api/` - all-api 生成的 API 代码
- `example/kae/api/` - kae 生成的 API 代码
- `example/open/api/` - open 生成的 API 代码
- `example/usercenter/api/` - usercenter 生成的 API 代码
## 快照测试
快照测试用于确保代码重构后生成的 API 代码保持一致:
```bash
# 运行快照对比
yarn test
# 更新快照基准
yarn test:update
```
## 添加新测试用例
### 1. 准备 Swagger 数据
在 `example` 目录下创建新的示例项目:
```
example/
└── your-project/
├── swagger.json # Swagger 定义文件
└── api/ # API 输出目录
```
### 2. 创建开发模式测试
在 `tests/dev/` 下创建 `your-project.ts`:
```typescript
import { autoRequest } from './../../src/index';
import path from 'path';
import yourApi from './../../example/your-project/swagger.json';
const generatorApi = (source, api, log) => {
autoRequest(JSON.stringify(source) as any, api, {
filename: 'index',
isTypeScript: true,
skipPrompt: true,
}).then(({ write }) => {
write();
});
};
generatorApi(
yourApi,
path.join(__dirname, './../../example/your-project/api/'),
path.join(__dirname, './../../example/your-project/logs/')
);
```
### 3. 创建构建模式测试
在 `tests/build/` 下创建 `your-project.js`:
```javascript
const { autoRequest } = require('./../../dist/bundle');
const path = require('path');
const yourApi = require('./../../example/your-project/swagger.json');
const generatorApi = (source, api, log) => {
autoRequest(JSON.stringify(source), api, {
filename: 'index',
isTypeScript: true,
skipPrompt: true,
}).then(({ write }) => {
write();
});
};
generatorApi(
yourApi,
path.join(__dirname, './../../example/your-project/api/'),
path.join(__dirname, './../../example/your-project/logs/')
);
```
### 4. 运行测试
```bash
# 运行开发测试
yarn dev:test
# 运行构建测试
yarn build:test
```
## 注意事项
1. **开发测试使用 TypeScript**:`tests/dev/*.ts` 文件使用 ES 模块语法和 TypeScript 类型
2. **构建测试使用 CommonJS**:`tests/build/*.js` 文件使用 CommonJS 格式(`require`/`module.exports`)
3. **统一配置管理**:所有配置在 `tests/base/configs` 中管理,确保 `dev` 和 `build` 测试使用相同配置
4. **skipPrompt 参数**:所有测试配置默认设置 `skipPrompt: true` 以避免交互式提示
5. **共享 Swagger 数据**:测试文件从 `example` 目录读取 Swagger JSON,避免数据重复
6. **统一输出目录**:生成的 API 文件统一输出到 `example` 目录,方便快照对比
## 故障排查
### 问题:开发测试失败,提示 "Cannot use import statement"
**原因**: Babel 未正确转译 TypeScript 文件
**解决**: 确保 `.erb/scripts/BabelRegister` 文件存在且配置正确
### 问题:构建测试失败,提示 "Cannot find module"
**原因**: 构建产物不存在或路径错误
**解决**: 先运行 `yarn build` 生成 `dist/bundle.js`
### 问题:测试通过但生成的代码不正确
**原因**: Swagger JSON 数据或配置参数有误
**解决**:
1. 检查 `example/*/swagger.json` 文件格式
2. 检查测试文件中的 `autoRequest` 配置参数
3. 运行 `yarn example` 手动验证单个示例