前后端目录重命名: - reading-platform-java/ → lesingle-edu-reading-platform-backend/ - reading-platform-frontend/ → lesingle-edu-reading-platform-frontend/ 更新相关文件: - 所有 shell 脚本中的目录引用 - pom.xml 和 application.yml 中的项目名称 - package.json 中的项目名称 - .claude/CLAUDE.md 中的路径引用 - README 文档中的路径引用
101 lines
3.3 KiB
TypeScript
101 lines
3.3 KiB
TypeScript
/**
|
|
* 调试课程创建 - 检查发送的请求数据
|
|
*/
|
|
import { test, expect } from '@playwright/test';
|
|
import { loginAsAdmin } from './helpers';
|
|
|
|
test.describe('课程创建调试 - 检查请求数据', () => {
|
|
test('检查发送到 API 的请求数据', async ({ page }) => {
|
|
test.setTimeout(180000);
|
|
|
|
const courseName = '调试测试课程包-' + Date.now();
|
|
console.log('=== 测试开始 ===');
|
|
console.log('课程名称:', courseName);
|
|
|
|
// 步骤 1: 登录
|
|
console.log('=== 步骤 1: 登录 ===');
|
|
await loginAsAdmin(page);
|
|
await page.waitForTimeout(2000);
|
|
|
|
// 步骤 2: 进入课程创建页面
|
|
console.log('=== 步骤 2: 进入课程创建页面 ===');
|
|
await page.goto('/admin/courses/create', { timeout: 30000, waitUntil: 'networkidle' });
|
|
await page.waitForTimeout(3000);
|
|
|
|
// 步骤 3: 填写基本信息
|
|
console.log('=== 步骤 3: 填写基本信息 ===');
|
|
await page.getByPlaceholder('请输入课程包名称').fill(courseName);
|
|
|
|
console.log('选择主题...');
|
|
await page.locator('.ant-select-selector').first().click();
|
|
await page.waitForTimeout(500);
|
|
const themeOption = page.getByText('社会认知', { exact: true }).first();
|
|
await themeOption.click();
|
|
await page.waitForTimeout(300);
|
|
|
|
console.log('选择年级...');
|
|
await page.getByRole('checkbox', { name: '小班' }).check();
|
|
await page.waitForTimeout(300);
|
|
|
|
console.log('填写核心内容...');
|
|
await page.getByPlaceholder('请输入课程包核心内容').fill('调试测试课程内容');
|
|
await page.waitForTimeout(500);
|
|
|
|
// 步骤 4: 点击下一步到最后
|
|
console.log('=== 步骤 4: 点击下一步 ===');
|
|
for (let i = 0; i < 6; i++) {
|
|
const nextButton = page.getByRole('button', { name: '下一步' });
|
|
if (await nextButton.isVisible().catch(() => false)) {
|
|
await nextButton.click();
|
|
await page.waitForTimeout(800);
|
|
}
|
|
}
|
|
await page.waitForTimeout(1000);
|
|
|
|
// 步骤 5: 监控请求
|
|
console.log('=== 步骤 5: 点击创建并监控请求 ===');
|
|
|
|
const [requestPromise] = await Promise.all([
|
|
page.waitForRequest(
|
|
req => req.url().includes('/api/v1/admin/courses') && req.method() === 'POST',
|
|
{ timeout: 15000 }
|
|
).catch(() => null),
|
|
page.locator('.step-actions .ant-btn-primary').last().click()
|
|
]);
|
|
|
|
if (requestPromise) {
|
|
const postData = requestPromise.postData();
|
|
console.log('=== 请求体 ===');
|
|
console.log(postData);
|
|
|
|
try {
|
|
const json = JSON.parse(postData || '{}');
|
|
console.log('=== 解析后的 JSON ===');
|
|
console.log(JSON.stringify(json, null, 2));
|
|
} catch {
|
|
console.log('无法解析 JSON');
|
|
}
|
|
|
|
// 等待响应
|
|
const [response] = await Promise.all([
|
|
page.waitForResponse(
|
|
res => res.url().includes('/api/v1/admin/courses') && res.request().method() === 'POST',
|
|
{ timeout: 15000 }
|
|
).catch(() => null)
|
|
]);
|
|
|
|
if (response) {
|
|
console.log('=== 响应 ===');
|
|
console.log('状态:', response.status());
|
|
const responseBody = await response.text();
|
|
console.log('响应体:', responseBody);
|
|
}
|
|
} else {
|
|
console.log('未捕获到请求');
|
|
}
|
|
|
|
// 截图
|
|
await page.screenshot({ path: 'test-results/debug-request-data.png' });
|
|
});
|
|
});
|