新增e2e测试脚本,修复部分问题
This commit was merged in pull request #51.
This commit is contained in:
@@ -0,0 +1,131 @@
|
||||
const { launchMiniProgram, closeMiniProgram, sleep } = require('../helpers/automator');
|
||||
const LoginPage = require('../pages/LoginPage');
|
||||
const HomePage = require('../pages/HomePage');
|
||||
const CourseListPage = require('../pages/CourseListPage');
|
||||
const CourseDetailPage = require('../pages/CourseDetailPage');
|
||||
|
||||
let miniProgram;
|
||||
let loginPage;
|
||||
let homePage;
|
||||
let courseListPage;
|
||||
let courseDetailPage;
|
||||
|
||||
describe('P2 - 教练课程控制测试(开课/结课)', () => {
|
||||
beforeAll(async () => {
|
||||
miniProgram = await launchMiniProgram();
|
||||
loginPage = new LoginPage(miniProgram);
|
||||
homePage = new HomePage(miniProgram);
|
||||
courseListPage = new CourseListPage(miniProgram);
|
||||
courseDetailPage = new CourseDetailPage(miniProgram);
|
||||
|
||||
// 先完成登录
|
||||
await loginPage.login('coach_test1', 'Test@123');
|
||||
await loginPage.waitForLoginSuccess(20000);
|
||||
await homePage.waitForLoad();
|
||||
}, 120000);
|
||||
|
||||
afterAll(async () => {
|
||||
await closeMiniProgram();
|
||||
}, 30000);
|
||||
|
||||
test('导航到课程列表并筛选待开课课程', async () => {
|
||||
await homePage.navigateToCourseList();
|
||||
await courseListPage.waitForLoad();
|
||||
await courseListPage.filterByStatus('pending');
|
||||
await sleep(1000);
|
||||
}, 30000);
|
||||
|
||||
test('进入待开课课程详情 → 验证开课按钮存在', async () => {
|
||||
const count = await courseListPage.getCourseCount();
|
||||
|
||||
if (count === 0) {
|
||||
console.warn('[WARN] 没有待开课课程,跳过开课/结课测试');
|
||||
return;
|
||||
}
|
||||
|
||||
// 点击第一个待开课课程
|
||||
await courseListPage.clickCourse(0);
|
||||
await courseDetailPage.waitForLoad();
|
||||
|
||||
const actionBtn = await courseDetailPage.getActionButtonStatus();
|
||||
expect(actionBtn).not.toBeNull();
|
||||
|
||||
if (actionBtn.type === 'start') {
|
||||
// 如果按钮存在且为开课按钮
|
||||
expect(actionBtn.text).toMatch(/开课/i);
|
||||
}
|
||||
// 注:如果 disabled,说明未到开课时间,跳过实操
|
||||
}, 30000);
|
||||
|
||||
test('点击开课按钮(如可用)→ 验证状态变化', async () => {
|
||||
const actionBtn = await courseDetailPage.getActionButtonStatus();
|
||||
|
||||
if (!actionBtn || actionBtn.type !== 'start') {
|
||||
console.warn('[WARN] 没有可用的开课按钮,跳过开课操作测试');
|
||||
return;
|
||||
}
|
||||
|
||||
if (actionBtn.disabled) {
|
||||
console.warn('[WARN] 开课按钮被禁用(尚未到开课时间),跳过开课操作');
|
||||
return;
|
||||
}
|
||||
|
||||
// 执行开课
|
||||
await courseDetailPage.startCourse();
|
||||
await sleep(2000);
|
||||
|
||||
// 刷新页面查看状态是否变化
|
||||
const page = await miniProgram.currentPage();
|
||||
const statusEl = await page.$('.cover-status text');
|
||||
if (statusEl) {
|
||||
const statusText = (await statusEl.text()).trim();
|
||||
expect(statusText).toMatch(/进行中|教练迟到/);
|
||||
}
|
||||
}, 60000);
|
||||
|
||||
test('进入进行中课程 → 验证结课按钮存在', async () => {
|
||||
// 回到课程列表页
|
||||
await miniProgram.navigateBack();
|
||||
await sleep(1500);
|
||||
|
||||
const page = await miniProgram.currentPage();
|
||||
|
||||
// 如果在课程列表页
|
||||
if (page.path.includes('pages/course-list')) {
|
||||
await courseListPage.filterByStatus('in_progress');
|
||||
await sleep(1500);
|
||||
|
||||
const count = await courseListPage.getCourseCount();
|
||||
if (count === 0) {
|
||||
console.warn('[WARN] 没有进行中的课程,跳过结课测试');
|
||||
return;
|
||||
}
|
||||
|
||||
await courseListPage.clickCourse(0);
|
||||
await courseDetailPage.waitForLoad();
|
||||
|
||||
const actionBtn = await courseDetailPage.getActionButtonStatus();
|
||||
expect(actionBtn).not.toBeNull();
|
||||
|
||||
if (actionBtn) {
|
||||
// 可以是 end 或 disabled(不满足结课条件)
|
||||
expect(['end', 'disabled']).toContain(actionBtn.type);
|
||||
}
|
||||
}
|
||||
}, 40000);
|
||||
|
||||
test('生成签到二维码(模拟)→ 返回 courseId', async () => {
|
||||
const page = await miniProgram.currentPage();
|
||||
|
||||
if (!page.path.includes('pages/course-detail')) {
|
||||
console.warn('[WARN] 不在课程详情页,跳过二维码测试');
|
||||
return;
|
||||
}
|
||||
|
||||
const qrData = await courseDetailPage.generateQRCode();
|
||||
expect(qrData).toBeDefined();
|
||||
// 验证返回的数据结构
|
||||
expect(qrData).toHaveProperty('courseId');
|
||||
expect(qrData).toHaveProperty('timestamp');
|
||||
}, 15000);
|
||||
});
|
||||
Reference in New Issue
Block a user