// 测试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);