auto-request
Version:
通过Yapi JSON Schema生成接口Axios或Taro接口
79 lines (67 loc) • 3.22 kB
JavaScript
/**
* Account API 构建测试(使用 CommonJS)
* 测试从编译后的 dist/bundle.js 使用 auto-request
*/
const { autoRequest, renderMethodArgs, wrapperMethodPreInterface } = require('../../dist/bundle.js');
const path = require('path');
const accountApi = require('../../example/account/swagger.json');
const { accountConfig } = require('../base/configs');
const outputDir = path.join(__dirname, './../../example/account/api/');
const snapshotsFile = path.join(__dirname, './../../example/account/snapshots.md');
const logDir = path.join(__dirname, './../../example/account/api/');
const swaggerBackupPath = path.join(__dirname, './../../example/account/swagger.json');
// Account 配置(包含自定义 renderMethodCall)
const getAccountConfig = () => ({
...accountConfig.baseConfig,
snapshotsPath: snapshotsFile,
loggerPath: path.join(logDir, 'errors.json'), // 使用完整路径
swaggerBackupPath: swaggerBackupPath,
skipPrompt: true, // 测试时跳过交互提示
renderHeaderTemplate: () => `import axios, { AxiosRequestConfig, AxiosResponse } from 'axios'\n\n`,
renderMethodCall: function () {
// 清理函数名中的特殊字符
let methodName = this.getMethodsName();
// 移除所有花括号及其内容
methodName = methodName.replace(/\{[^}]*\}/g, '');
// 移除所有特殊字符,只保留字母数字和下划线
methodName = methodName.replace(/[^a-zA-Z0-9_]/g, '');
// 使用标准的泛型参数生成器
const preInterface = renderMethodArgs(wrapperMethodPreInterface(this));
// 获取函数参数(带类型)
const pathArgs = this.getMethodPrePath();
const paramsArgs = this.getMethodPreParams();
const dataArgs = this.renderGetMethodData();
const optionArgs = this.getMethodOption();
const args = renderMethodArgs([pathArgs, paramsArgs, dataArgs, optionArgs]);
const requestArgs = renderMethodArgs([
`url: \`${this.getUrl()}\``,
`method: '${this.method}'`,
`${this.renderOptionsStr.data}`,
`${this.renderOptionsStr.params}`,
`...options`,
]);
// 生成summary(如果与description不同)
const summary = this.description === this.summary ? '' : `\n * @summary ${this.summary}`;
return `
/***
* @description ${this.description || ''}${summary}
**/
export const ${methodName} = <${preInterface}>(${args}): Promise<S> => {
return axios.request({${requestArgs}})
}\n`;
},
});
(async () => {
console.log('\n╔════════════════════════════════════════════╗');
console.log('║ Account API 构建测试 (使用 bundle.js) ║');
console.log('╚════════════════════════════════════════════╝\n');
console.log('--- 从本地 swagger.json 生成 ---');
try {
const result = await autoRequest(JSON.stringify(accountApi), outputDir, getAccountConfig());
await result.write();
console.log('✅ Account API 生成成功\n');
} catch (error) {
console.error('❌ Account API 生成失败:', error);
process.exit(1);
}
})();