// 测试GraphQL API - 报名接口
|
const https = require('https');
|
const http = require('http');
|
|
console.log('=== GraphQL API 测试 ===\n');
|
|
// GraphQL 查询和变更
|
const queries = {
|
// 测试基础连接
|
healthCheck: {
|
query: `
|
query {
|
__schema {
|
types {
|
name
|
}
|
}
|
}
|
`
|
},
|
|
// 测试报名提交
|
submitRegistration: {
|
query: `
|
mutation SubmitActivityRegistration($input: ActivityRegistrationInput!) {
|
submitActivityRegistration(input: $input) {
|
success
|
message
|
registrationId
|
}
|
}
|
`,
|
variables: {
|
input: {
|
activityId: 1,
|
playerInfo: {
|
name: "测试用户",
|
phone: "13912345678",
|
gender: 1,
|
birthDate: "1995-08-20",
|
education: "本科",
|
introduction: "这是一个测试用户的个人介绍",
|
avatarMediaId: "test_avatar_001.jpg"
|
},
|
regionId: 1,
|
projectName: "测试项目",
|
description: "这是一个测试项目的描述",
|
attachmentMediaIds: [
|
"test_attachment_001.pdf",
|
"test_attachment_002.jpg"
|
]
|
}
|
}
|
}
|
};
|
|
// 测试配置
|
const testConfig = {
|
host: 'localhost',
|
port: 8080,
|
path: '/api/graphql',
|
method: 'POST',
|
headers: {
|
'Content-Type': 'application/json',
|
'Accept': 'application/json'
|
}
|
};
|
|
// 执行GraphQL请求
|
function executeGraphQLRequest(testName, requestData) {
|
return new Promise((resolve, reject) => {
|
const postData = JSON.stringify(requestData);
|
|
const options = {
|
...testConfig,
|
headers: {
|
...testConfig.headers,
|
'Content-Length': Buffer.byteLength(postData)
|
}
|
};
|
|
console.log(`\n--- ${testName} ---`);
|
console.log(`请求地址: http://${options.host}:${options.port}${options.path}`);
|
console.log(`请求数据:`, JSON.stringify(requestData, null, 2));
|
|
const req = http.request(options, (res) => {
|
let data = '';
|
|
res.on('data', (chunk) => {
|
data += chunk;
|
});
|
|
res.on('end', () => {
|
console.log(`响应状态: ${res.statusCode}`);
|
console.log(`响应头:`, res.headers);
|
|
try {
|
const response = JSON.parse(data);
|
console.log(`响应数据:`, JSON.stringify(response, null, 2));
|
resolve({ statusCode: res.statusCode, data: response });
|
} catch (error) {
|
console.log(`响应原始数据:`, data);
|
resolve({ statusCode: res.statusCode, data: data, error: '解析JSON失败' });
|
}
|
});
|
});
|
|
req.on('error', (error) => {
|
console.log(`请求错误:`, error.message);
|
reject(error);
|
});
|
|
req.write(postData);
|
req.end();
|
});
|
}
|
|
// 主测试函数
|
async function runTests() {
|
console.log('开始测试GraphQL API...\n');
|
|
try {
|
// 1. 测试基础连接
|
console.log('1. 测试GraphQL Schema查询...');
|
const healthResult = await executeGraphQLRequest('Schema查询', queries.healthCheck);
|
|
if (healthResult.statusCode === 200 && healthResult.data && !healthResult.data.errors) {
|
console.log('✅ GraphQL服务连接正常');
|
} else {
|
console.log('❌ GraphQL服务连接异常');
|
if (healthResult.error) {
|
console.log('错误信息:', healthResult.error);
|
}
|
}
|
|
// 等待一秒
|
await new Promise(resolve => setTimeout(resolve, 1000));
|
|
// 2. 测试报名提交
|
console.log('\n2. 测试报名提交接口...');
|
const registrationResult = await executeGraphQLRequest('报名提交', queries.submitRegistration);
|
|
if (registrationResult.statusCode === 200 && registrationResult.data) {
|
if (registrationResult.data.errors) {
|
console.log('❌ 报名提交失败');
|
console.log('GraphQL错误:', registrationResult.data.errors);
|
} else if (registrationResult.data.data && registrationResult.data.data.submitActivityRegistration) {
|
const result = registrationResult.data.data.submitActivityRegistration;
|
if (result.success) {
|
console.log('✅ 报名提交成功');
|
console.log(`报名ID: ${result.registrationId}`);
|
console.log(`消息: ${result.message}`);
|
} else {
|
console.log('❌ 报名提交失败');
|
console.log(`错误消息: ${result.message}`);
|
}
|
}
|
} else {
|
console.log('❌ 报名提交请求失败');
|
}
|
|
} catch (error) {
|
console.log('❌ 测试过程中发生错误:', error.message);
|
|
if (error.code === 'ECONNREFUSED') {
|
console.log('\n💡 提示: 后端服务可能未启动或端口不正确');
|
console.log('请确保后端服务正在运行在 http://localhost:8080');
|
}
|
}
|
|
console.log('\n=== 测试完成 ===');
|
|
// 输出测试总结
|
console.log('\n=== 测试总结 ===');
|
console.log('本次测试验证了以下内容:');
|
console.log('1. GraphQL服务的基础连接');
|
console.log('2. Schema查询功能');
|
console.log('3. 报名提交mutation');
|
console.log('4. 数据传输和响应处理');
|
|
console.log('\n=== 数据库验证建议 ===');
|
console.log('如果报名提交成功,请检查以下数据库表:');
|
console.log('1. t_user - 用户基本信息');
|
console.log('2. t_player - 选手详细信息');
|
console.log('3. t_activity_player - 活动报名记录');
|
console.log('4. t_media - 头像和附件文件记录');
|
|
console.log('\n可以使用以下SQL查询验证数据:');
|
console.log('SELECT * FROM t_user WHERE phone = "13912345678";');
|
console.log('SELECT * FROM t_player WHERE user_id = (SELECT id FROM t_user WHERE phone = "13912345678");');
|
console.log('SELECT * FROM t_activity_player WHERE player_id = (SELECT id FROM t_player WHERE user_id = (SELECT id FROM t_user WHERE phone = "13912345678"));');
|
console.log('SELECT * FROM t_media WHERE related_type IN ("user_avatar", "registration_attachment");');
|
}
|
|
// 运行测试
|
runTests().catch(console.error);
|