Files
everything-is-suitable/everything-is-suitable-test/e2e/uniapp/almanac-e2e.spec.ts
T
张翔 08ea5fbe98 feat(admin): 添加用户管理相关文件
添加用户管理视图、API和状态管理文件
2026-03-28 14:37:29 +08:00

227 lines
7.5 KiB
TypeScript

/**
* Uniapp 黄历页面 E2E 测试
* 测试黄历功能的核心业务流程
*/
import { test, expect } from '../shared/fixtures/test-fixtures';
import { testLogger } from '../shared/utils/test-logger';
test.describe('黄历页面功能测试 @uniapp @almanac', () => {
test.beforeEach(async ({ uniappAlmanacPage }) => {
await uniappAlmanacPage.navigate();
});
test('黄历页面 - 正常加载显示', async ({ uniappAlmanacPage }) => {
testLogger.startTest('黄历页面 - 正常加载显示');
// 验证页面标题
const title = await uniappAlmanacPage.getPageTitle();
expect(title).toContain('黄历');
// 验证宜忌列表可见
const yiList = await uniappAlmanacPage.getYiList();
expect(yiList.length).toBeGreaterThanOrEqual(0);
testLogger.endTest('黄历页面 - 正常加载显示', 'passed');
});
test('黄历页面 - 宜忌信息显示', async ({ uniappAlmanacPage }) => {
testLogger.startTest('黄历页面 - 宜忌信息显示');
// 获取宜列表
const yiList = await uniappAlmanacPage.getYiList();
testLogger.info(`宜: ${yiList.join(', ')}`);
// 获取忌列表
const jiList = await uniappAlmanacPage.getJiList();
testLogger.info(`忌: ${jiList.join(', ')}`);
// 验证宜忌数据不为空
expect(yiList.length + jiList.length).toBeGreaterThanOrEqual(0);
testLogger.endTest('黄历页面 - 宜忌信息显示', 'passed');
});
test('黄历页面 - 日期切换功能', async ({ uniappAlmanacPage }) => {
testLogger.startTest('黄历页面 - 日期切换功能');
// 获取当前日期
const currentDate = await uniappAlmanacPage.getCurrentDate();
testLogger.info(`当前日期: ${currentDate}`);
// 点击下一天
await uniappAlmanacPage.clickNextDate();
// 获取切换后的日期
const nextDate = await uniappAlmanacPage.getCurrentDate();
testLogger.info(`下一天日期: ${nextDate}`);
// 验证日期已变化
expect(nextDate).not.toEqual(currentDate);
// 点击前一天
await uniappAlmanacPage.clickPrevDate();
// 获取切换后的日期
const prevDate = await uniappAlmanacPage.getCurrentDate();
testLogger.info(`前一天日期: ${prevDate}`);
testLogger.endTest('黄历页面 - 日期切换功能', 'passed');
});
test('黄历页面 - 宜忌数据随日期变化', async ({ uniappAlmanacPage }) => {
testLogger.startTest('黄历页面 - 宜忌数据随日期变化');
// 获取当前宜忌
const yiList1 = await uniappAlmanacPage.getYiList();
const jiList1 = await uniappAlmanacPage.getJiList();
// 切换日期
await uniappAlmanacPage.clickNextDate();
// 获取新的宜忌
const yiList2 = await uniappAlmanacPage.getYiList();
const jiList2 = await uniappAlmanacPage.getJiList();
// 验证宜忌数据已更新(可能相同也可能不同)
testLogger.info(`日期1 - 宜: ${yiList1.length}项, 忌: ${jiList1.length}`);
testLogger.info(`日期2 - 宜: ${yiList2.length}项, 忌: ${jiList2.length}`);
testLogger.endTest('黄历页面 - 宜忌数据随日期变化', 'passed');
});
test('黄历页面 - 跨月日期切换', async ({ uniappAlmanacPage }) => {
testLogger.startTest('黄历页面 - 跨月日期切换');
// 连续切换多天,跨越月份
for (let i = 0; i < 35; i++) {
await uniappAlmanacPage.clickNextDate();
}
// 验证页面正常
const yiList = await uniappAlmanacPage.getYiList();
expect(yiList.length).toBeGreaterThanOrEqual(0);
testLogger.endTest('黄历页面 - 跨月日期切换', 'passed');
});
test('黄历页面 - 特殊节日显示', async ({ uniappAlmanacPage }) => {
testLogger.startTest('黄历页面 - 特殊节日显示');
// 导航到春节(假设可以通过某种方式设置日期)
await uniappAlmanacPage.navigate();
// 获取当前日期信息
const currentDate = await uniappAlmanacPage.getCurrentDate();
// 验证页面正常显示
const yiList = await uniappAlmanacPage.getYiList();
expect(yiList.length).toBeGreaterThanOrEqual(0);
testLogger.info(`当前日期: ${currentDate}`);
testLogger.endTest('黄历页面 - 特殊节日显示', 'passed');
});
});
test.describe('黄历页面边界测试 @uniapp @almanac @boundary', () => {
test.beforeEach(async ({ uniappAlmanacPage }) => {
await uniappAlmanacPage.navigate();
});
test('黄历页面 - 快速连续切换日期', async ({ uniappAlmanacPage }) => {
testLogger.startTest('黄历页面 - 快速连续切换日期');
// 快速连续点击
for (let i = 0; i < 20; i++) {
await uniappAlmanacPage['page'].click('[data-testid="next-date"]').catch(() => {});
}
// 等待页面稳定
await uniappAlmanacPage.waitForTimeout(1000);
// 验证页面没有崩溃
const yiList = await uniappAlmanacPage.getYiList();
expect(yiList.length).toBeGreaterThanOrEqual(0);
testLogger.endTest('黄历页面 - 快速连续切换日期', 'passed');
});
test('黄历页面 - 跨年日期切换', async ({ uniappAlmanacPage }) => {
testLogger.startTest('黄历页面 - 跨年日期切换');
// 连续切换365天
for (let i = 0; i < 365; i++) {
await uniappAlmanacPage.clickNextDate();
}
// 验证页面正常
const yiList = await uniappAlmanacPage.getYiList();
expect(yiList.length).toBeGreaterThanOrEqual(0);
testLogger.endTest('黄历页面 - 跨年日期切换', 'passed');
});
test('黄历页面 - 响应式布局', async ({ uniappAlmanacPage }) => {
testLogger.startTest('黄历页面 - 响应式布局');
// 设置不同的视口大小
const viewports = [
{ width: 375, height: 667 },
{ width: 414, height: 896 },
{ width: 768, height: 1024 },
];
for (const viewport of viewports) {
await uniappAlmanacPage['page'].setViewportSize(viewport);
await uniappAlmanacPage.reload();
const yiList = await uniappAlmanacPage.getYiList();
expect(yiList.length).toBeGreaterThanOrEqual(0);
testLogger.info(`视口 ${viewport.width}x${viewport.height}: 正常显示`);
}
testLogger.endTest('黄历页面 - 响应式布局', 'passed');
});
});
test.describe('黄历页面性能测试 @uniapp @almanac @performance', () => {
test('黄历页面 - 加载性能', async ({ uniappAlmanacPage }) => {
testLogger.startTest('黄历页面 - 加载性能');
const startTime = Date.now();
await uniappAlmanacPage.navigate();
const loadTime = Date.now() - startTime;
// 验证加载时间小于3秒
expect(loadTime).toBeLessThan(3000);
testLogger.info(`页面加载时间: ${loadTime}ms`);
testLogger.endTest('黄历页面 - 加载性能', 'passed');
});
test('黄历页面 - 日期切换性能', async ({ uniappAlmanacPage }) => {
testLogger.startTest('黄历页面 - 日期切换性能');
await uniappAlmanacPage.navigate();
const startTime = Date.now();
// 连续切换30天
for (let i = 0; i < 30; i++) {
await uniappAlmanacPage.clickNextDate();
}
const switchTime = Date.now() - startTime;
// 验证切换时间小于3秒
expect(switchTime).toBeLessThan(3000);
testLogger.info(`30天切换时间: ${switchTime}ms`);
testLogger.endTest('黄历页面 - 日期切换性能', 'passed');
});
});