const http = require('http');
|
|
// 模拟 GraphQL 请求
|
function makeGraphQLRequest() {
|
return new Promise((resolve, reject) => {
|
const postData = JSON.stringify({
|
query: `
|
query GetActivities($page: Int!, $size: Int!) {
|
activities(page: $page, size: $size) {
|
content {
|
id
|
name
|
signupDeadline
|
playerCount
|
playerMax
|
state
|
stateName
|
coverImage {
|
fullUrl
|
}
|
}
|
totalElements
|
totalPages
|
number
|
size
|
}
|
}
|
`,
|
variables: {
|
page: 0,
|
size: 10
|
}
|
});
|
|
const options = {
|
hostname: 'localhost',
|
port: 8080,
|
path: '/api/graphql',
|
method: 'POST',
|
headers: {
|
'Content-Type': 'application/json',
|
'Content-Length': Buffer.byteLength(postData)
|
}
|
};
|
|
const req = http.request(options, (res) => {
|
let data = '';
|
res.on('data', (chunk) => {
|
data += chunk;
|
});
|
res.on('end', () => {
|
try {
|
const result = JSON.parse(data);
|
resolve(result);
|
} catch (e) {
|
reject(e);
|
}
|
});
|
});
|
|
req.on('error', (e) => {
|
reject(e);
|
});
|
|
req.write(postData);
|
req.end();
|
});
|
}
|
|
// 模拟小程序的 dataset 和事件处理
|
function simulateClickEvent(activityId) {
|
console.log('\n=== 模拟点击事件 ===');
|
console.log('活动ID:', activityId);
|
console.log('活动ID类型:', typeof activityId);
|
|
// 模拟 data-id 属性设置
|
const dataId = activityId;
|
console.log('data-id 设置为:', dataId);
|
|
// 模拟事件对象
|
const mockEvent = {
|
currentTarget: {
|
dataset: {
|
id: dataId
|
}
|
}
|
};
|
|
// 模拟 onDetailTap 函数
|
function onDetailTap(e) {
|
const id = e.currentTarget.dataset.id;
|
console.log('onDetailTap 获取到的 id:', id);
|
console.log('id 类型:', typeof id);
|
|
if (id) {
|
goToActivityDetail(id);
|
} else {
|
console.log('❌ ID 为空或未定义');
|
}
|
}
|
|
// 模拟 goToActivityDetail 函数
|
function goToActivityDetail(activityId) {
|
console.log('goToActivityDetail 接收到的 activityId:', activityId);
|
console.log('activityId 类型:', typeof activityId);
|
|
// 模拟 utils.navigateTo
|
const params = { id: activityId };
|
console.log('传递给详情页的参数:', params);
|
|
// 模拟 URL 构建
|
const url = '/pages/activity/detail';
|
const queryString = Object.keys(params)
|
.map(key => key + '=' + encodeURIComponent(params[key]))
|
.join('&');
|
const fullUrl = url + '?' + queryString;
|
console.log('构建的完整 URL:', fullUrl);
|
|
// 模拟详情页接收参数
|
const urlParams = new URLSearchParams('?' + queryString);
|
const receivedId = urlParams.get('id');
|
console.log('详情页接收到的 id:', receivedId);
|
console.log('详情页接收到的 id 类型:', typeof receivedId);
|
|
return {
|
url: fullUrl,
|
params: params,
|
receivedId: receivedId
|
};
|
}
|
|
// 执行点击事件
|
const result = onDetailTap(mockEvent);
|
return result;
|
}
|
|
// 主函数
|
async function main() {
|
try {
|
console.log('开始测试活动ID和参数传递...\n');
|
|
const result = await makeGraphQLRequest();
|
|
if (result.data && result.data.activities && result.data.activities.content) {
|
const activities = result.data.activities.content;
|
console.log('获取到', activities.length, '个活动');
|
|
activities.forEach((activity, index) => {
|
console.log('\n--- 活动', index + 1, '---');
|
console.log('ID:', activity.id);
|
console.log('ID类型:', typeof activity.id);
|
console.log('名称:', activity.name);
|
console.log('状态:', activity.stateName);
|
|
// 检查 ID 是否有效
|
if (!activity.id) {
|
console.log('❌ 警告:活动ID为空');
|
} else if (typeof activity.id !== 'string' && typeof activity.id !== 'number') {
|
console.log('❌ 警告:活动ID类型异常');
|
} else {
|
console.log('✅ 活动ID正常');
|
}
|
|
// 模拟点击事件
|
simulateClickEvent(activity.id);
|
});
|
|
// 测试边界情况
|
console.log('\n=== 测试边界情况 ===');
|
console.log('\n1. 测试 undefined ID:');
|
simulateClickEvent(undefined);
|
|
console.log('\n2. 测试 null ID:');
|
simulateClickEvent(null);
|
|
console.log('\n3. 测试空字符串 ID:');
|
simulateClickEvent('');
|
|
console.log('\n4. 测试数字 ID:');
|
simulateClickEvent(123);
|
|
} else {
|
console.log('❌ 未获取到活动数据');
|
console.log('响应:', JSON.stringify(result, null, 2));
|
}
|
|
} catch (error) {
|
console.error('❌ 请求失败:', error.message);
|
if (error.code) {
|
console.error('错误代码:', error.code);
|
}
|
}
|
}
|
|
main();
|