149 lines
4.8 KiB
JavaScript
149 lines
4.8 KiB
JavaScript
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('P1 - 教练课程工作流测试', () => {
|
|
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();
|
|
|
|
const page = await miniProgram.currentPage();
|
|
expect(page.path).toContain('pages/course-list/course-list');
|
|
|
|
await courseListPage.waitForLoad();
|
|
}, 30000);
|
|
|
|
test('课程列表页应显示筛选项', async () => {
|
|
const page = await miniProgram.currentPage();
|
|
|
|
// 验证 Tab 筛选栏存在
|
|
const tabs = await page.$$('.tab-item');
|
|
expect(tabs.length).toBeGreaterThanOrEqual(4);
|
|
|
|
// 验证 Tab 标签内容
|
|
const tabLabels = [];
|
|
for (const tab of tabs) {
|
|
const textEl = await tab.$('text');
|
|
tabLabels.push(textEl ? (await textEl.text()).trim() : '');
|
|
}
|
|
expect(tabLabels).toContain('全部');
|
|
expect(tabLabels).toContain('待开课');
|
|
expect(tabLabels).toContain('进行中');
|
|
expect(tabLabels).toContain('已结束');
|
|
}, 15000);
|
|
|
|
test('按状态筛选 → 待开课,应显示正确结果', async () => {
|
|
await courseListPage.filterByStatus('pending');
|
|
|
|
const page = await miniProgram.currentPage();
|
|
|
|
// 验证 active Tab
|
|
const activeTab = await page.$('.tab-item.active text');
|
|
expect(activeTab).not.toBeNull();
|
|
const activeLabel = await activeTab.text();
|
|
expect(activeLabel.trim()).toBe('待开课');
|
|
|
|
// 获取筛选结果并验证状态标签
|
|
const courses = await courseListPage.getCourseList();
|
|
for (const course of courses) {
|
|
// 待开课状态下所有课程的状态应为"正常"
|
|
expect(course.status).toBe('正常');
|
|
}
|
|
}, 20000);
|
|
|
|
test('按状态筛选 → 全部,应显示所有课程', async () => {
|
|
await courseListPage.filterByStatus('all');
|
|
|
|
const page = await miniProgram.currentPage();
|
|
const activeTab = await page.$('.tab-item.active text');
|
|
expect(activeTab).not.toBeNull();
|
|
const activeLabel = await activeTab.text();
|
|
expect(activeLabel.trim()).toBe('全部');
|
|
|
|
// 确保页面渲染完成
|
|
await sleep(1000);
|
|
}, 20000);
|
|
|
|
test('点击课程 → 进入课程详情页', async () => {
|
|
// 先切换到全部视图确保有数据
|
|
await courseListPage.filterByStatus('all');
|
|
await sleep(1000);
|
|
|
|
const count = await courseListPage.getCourseCount();
|
|
if (count === 0) {
|
|
console.warn('[WARN] 没有课程数据,跳过课程详情测试');
|
|
return;
|
|
}
|
|
|
|
// 点击第一个课程
|
|
await courseListPage.clickCourse(0);
|
|
|
|
const page = await miniProgram.currentPage();
|
|
expect(page.path).toContain('pages/course-detail/course-detail');
|
|
|
|
await courseDetailPage.waitForLoad();
|
|
}, 30000);
|
|
|
|
test('课程详情页应显示课程信息', async () => {
|
|
const page = await miniProgram.currentPage();
|
|
|
|
// 确认当前在课程详情页
|
|
if (!page.path.includes('pages/course-detail')) {
|
|
// 如果不在详情页,尝试导航到第一个课程
|
|
await homePage.navigateToCourseList();
|
|
await sleep(1000);
|
|
const count = await courseListPage.getCourseCount();
|
|
if (count === 0) {
|
|
console.warn('[WARN] 没有课程数据,跳过课程详情测试');
|
|
return;
|
|
}
|
|
await courseListPage.clickCourse(0);
|
|
await courseDetailPage.waitForLoad();
|
|
}
|
|
|
|
const info = await courseDetailPage.getCourseInfo();
|
|
|
|
// 课程名应存在
|
|
expect(info.courseName).toBeTruthy();
|
|
// 时间应存在
|
|
expect(info.time).toBeTruthy();
|
|
}, 20000);
|
|
|
|
test('课程详情页应显示学员人数信息', async () => {
|
|
const page = await miniProgram.currentPage();
|
|
if (!page.path.includes('pages/course-detail')) {
|
|
console.warn('[WARN] 不在课程详情页,跳过');
|
|
return;
|
|
}
|
|
|
|
const studentInfo = await courseDetailPage.getStudentList();
|
|
expect(studentInfo).toBeDefined();
|
|
expect(typeof studentInfo.count).toBe('number');
|
|
expect(typeof studentInfo.max).toBe('number');
|
|
}, 15000);
|
|
});
|