import { test, expect } from '../fixtures/admin.fixture' /** * 侧边栏导航和路由守卫测试 */ test.describe('侧边栏导航', () => { test('N-01 侧边栏菜单渲染', async ({ adminPage }) => { const page = adminPage // 验证侧边栏 Logo 区域 await expect(page.locator('.logo-title-main')).toHaveText('智创未来') // 验证菜单项存在(Ant Design 菜单项) const menuItems = page.locator('.ant-menu-item, .ant-menu-submenu') const count = await menuItems.count() expect(count).toBeGreaterThan(0) }) test('N-02 菜单点击导航 - 工作台', async ({ adminPage }) => { const page = adminPage // 点击工作台菜单 await page.locator('.ant-menu-item').filter({ hasText: '工作台' }).first().click() // 验证 URL 包含 dashboard await page.waitForURL(/dashboard|workbench/, { timeout: 10_000 }) // 验证页面内容加载(tenant-dashboard 和 welcome-banner 同时存在,需要指定其中一个) await expect(page.locator('.tenant-dashboard')).toBeVisible({ timeout: 10_000 }) }) test('N-03 菜单点击导航 - 活动管理子菜单', async ({ adminPage }) => { const page = adminPage // 展开活动管理子菜单 const submenu = page.locator('.ant-menu-submenu').filter({ hasText: '活动管理' }).first() await submenu.click() // 等待子菜单展开 await page.waitForTimeout(500) // 点击活动列表 const activityList = submenu.locator('.ant-menu-item').filter({ hasText: '活动列表' }).first() await activityList.click() // 验证跳转到活动列表页面 await page.waitForURL(/contests\/list/, { timeout: 10_000 }) await expect(page.locator('.contests-page')).toBeVisible({ timeout: 10_000 }) }) test('N-04 浏览器刷新保持状态', async ({ adminPage }) => { const page = adminPage // 确保在某个管理页面 await page.waitForURL(/gdlib/, { timeout: 5000 }) // 验证刷新前 Cookie 中有 token(使用 document.cookie 检测) const cookieStrBefore = await page.evaluate(() => document.cookie) expect(cookieStrBefore).toContain('token=') // 刷新页面 await page.reload({ waitUntil: 'networkidle' }) // 等待页面加载完成(路由守卫可能需要重新获取用户信息) await page.waitForTimeout(3000) // 验证 Cookie 中仍有 token const cookieStrAfter = await page.evaluate(() => document.cookie) expect(cookieStrAfter).toContain('token=') // 验证页面已渲染(管理端或登录页二选一) const hasSider = await page.locator('.custom-sider').isVisible({ timeout: 5_000 }).catch(() => false) const hasLogin = await page.locator('.login-container').isVisible({ timeout: 3_000 }).catch(() => false) // 至少应该渲染了某个页面 expect(hasSider || hasLogin).toBe(true) }) })