815cbf9d8c
- 更新 .gitignore:全面覆盖环境变量、数据库、日志、缓存、上传文件 - 移除误跟踪的 server/venv/、crm_data.db、.env 文件 - 新增 server/.env.example 模板 - 新增合同管理、利润核算、AI教练等功能模块 - 新增 Playwright e2e 测试套件 - 前后端多项功能升级和 bug 修复
52 lines
1.7 KiB
TypeScript
52 lines
1.7 KiB
TypeScript
/**
|
|
* 前端路由守卫与权限 E2E 测试
|
|
* 覆盖: 未登录重定向 / 已登录访问 /login / Token 失效后跳转
|
|
*/
|
|
import { test, expect } from '@playwright/test';
|
|
|
|
// 不使用全局 auth
|
|
test.use({ storageState: { cookies: [], origins: [] } });
|
|
|
|
test.describe('路由守卫', () => {
|
|
test('未登录访问受保护页面被重定向到登录页', async ({ page }) => {
|
|
await page.goto('/customers');
|
|
await page.waitForURL(/\/login/);
|
|
await expect(page.locator('.login-title')).toBeVisible();
|
|
});
|
|
|
|
test('未登录访问订单页被重定向', async ({ page }) => {
|
|
await page.goto('/orders');
|
|
await page.waitForURL(/\/login/);
|
|
});
|
|
|
|
test('未登录访问设置页被重定向', async ({ page }) => {
|
|
await page.goto('/settings');
|
|
await page.waitForURL(/\/login/);
|
|
});
|
|
|
|
test('登录页直接可访问', async ({ page }) => {
|
|
await page.goto('/login');
|
|
// 不会重定向,直接显示登录页
|
|
await expect(page.locator('.login-title')).toContainText('CRM');
|
|
});
|
|
});
|
|
|
|
test.describe('Token 销毁后行为', () => {
|
|
test('清除 Token 后访问受保护页面被重定向', async ({ page }) => {
|
|
// 先登录
|
|
await page.goto('/login');
|
|
await page.getByPlaceholder('用户名').fill('admin');
|
|
await page.getByPlaceholder('密码').fill('123456');
|
|
await page.getByRole('button', { name: '登 录' }).click();
|
|
await page.waitForURL('/', { timeout: 10000 });
|
|
|
|
// 清除 localStorage(模拟 Token 销毁)
|
|
await page.evaluate(() => localStorage.clear());
|
|
|
|
// 访问受保护页面
|
|
await page.goto('/customers');
|
|
// 应被重定向到登录页
|
|
await page.waitForURL(/\/login/, { timeout: 5000 });
|
|
});
|
|
});
|