0.0.1.0
This commit is contained in:
@@ -0,0 +1,114 @@
|
||||
const puppeteer = require('puppeteer');
|
||||
|
||||
async function testAPIs() {
|
||||
const browser = await puppeteer.launch({ headless: false });
|
||||
const page = await browser.newPage();
|
||||
|
||||
try {
|
||||
console.log('🧪 开始完整 API 测试...');
|
||||
|
||||
// 1. 访问登录页面
|
||||
await page.goto('http://localhost:3000/auth/signin');
|
||||
await page.waitForSelector('input[type="email"]');
|
||||
|
||||
// 2. 填写登录信息
|
||||
await page.type('input[type="email"]', 'test@example.com');
|
||||
await page.type('input[type="password"]', 'password123');
|
||||
|
||||
// 3. 点击登录
|
||||
await Promise.all([
|
||||
page.waitForNavigation(),
|
||||
page.click('button[type="submit"]')
|
||||
]);
|
||||
|
||||
// 4. 获取 cookies
|
||||
const cookies = await page.cookies();
|
||||
const sessionCookie = cookies.find(c => c.name === 'next-auth.session-token');
|
||||
|
||||
if (!sessionCookie) {
|
||||
console.error('❌ 未找到 session cookie');
|
||||
return;
|
||||
}
|
||||
|
||||
console.log('✅ 登录成功,获取到 session');
|
||||
|
||||
// 5. 测试 API 端点
|
||||
const testAPI = async (url, method = 'GET', data = null) => {
|
||||
const response = await page.evaluate(async (url, method, data, cookie) => {
|
||||
const options = {
|
||||
method,
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
'Cookie': `next-auth.session-token=${cookie}`
|
||||
}
|
||||
};
|
||||
|
||||
if (data) {
|
||||
options.body = JSON.stringify(data);
|
||||
}
|
||||
|
||||
const res = await fetch(`http://localhost:3000${url}`, options);
|
||||
const text = await res.text();
|
||||
|
||||
try {
|
||||
return {
|
||||
status: res.status,
|
||||
data: JSON.parse(text)
|
||||
};
|
||||
} catch {
|
||||
return {
|
||||
status: res.status,
|
||||
data: text
|
||||
};
|
||||
}
|
||||
}, url, method, data, sessionCookie.value);
|
||||
|
||||
console.log(`${method} ${url}: ${response.status}`);
|
||||
if (response.data) {
|
||||
console.log(JSON.stringify(response.data, null, 2));
|
||||
}
|
||||
console.log('---');
|
||||
|
||||
return response;
|
||||
};
|
||||
|
||||
// 测试获取家族树列表
|
||||
await testAPI('/api/trees');
|
||||
|
||||
// 测试创建家族树
|
||||
const treeResponse = await testAPI('/api/trees', 'POST', {
|
||||
name: '测试家族树',
|
||||
description: 'API 测试创建'
|
||||
});
|
||||
|
||||
if (treeResponse.status === 201) {
|
||||
const treeId = treeResponse.data.tree.id;
|
||||
console.log(`✅ 创建家族树成功,ID: ${treeId}`);
|
||||
|
||||
// 测试获取成员列表
|
||||
await testAPI(`/api/trees/${treeId}/members`);
|
||||
|
||||
// 测试创建成员
|
||||
await testAPI(`/api/trees/${treeId}/members`, 'POST', {
|
||||
surname: '李',
|
||||
givenName: '测试',
|
||||
fullName: '李测试',
|
||||
gender: 'MALE',
|
||||
generation: 1,
|
||||
birthDate: '1990-01-01'
|
||||
});
|
||||
|
||||
// 再次获取成员列表
|
||||
await testAPI(`/api/trees/${treeId}/members`);
|
||||
}
|
||||
|
||||
console.log('✅ API 测试完成!');
|
||||
|
||||
} catch (error) {
|
||||
console.error('❌ 测试失败:', error);
|
||||
} finally {
|
||||
await browser.close();
|
||||
}
|
||||
}
|
||||
|
||||
testAPIs();
|
||||
Reference in New Issue
Block a user