login.spec.ts 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. import { test, expect } from '../utils/test-setup';
  2. import testUsers from '../../fixtures/test-users.json';
  3. test.describe('用户认证流程', () => {
  4. test.beforeEach(async ({ page }) => {
  5. await page.goto('/login');
  6. await page.waitForLoadState('networkidle');
  7. });
  8. test('成功登录', async ({ loginPage, dashboardPage }) => {
  9. await loginPage.login(testUsers.admin.username, testUsers.admin.password);
  10. await dashboardPage.expectToBeVisible();
  11. });
  12. test('登录失败 - 错误密码', async ({ loginPage }) => {
  13. await loginPage.login(testUsers.admin.username, 'wrongpassword');
  14. await loginPage.expectLoginError();
  15. });
  16. test('登录失败 - 不存在的用户', async ({ loginPage }) => {
  17. await loginPage.login('nonexistent', testUsers.admin.password);
  18. await loginPage.expectLoginError();
  19. });
  20. test('导航到注册页面', async ({ loginPage, page }) => {
  21. await loginPage.navigateToRegister();
  22. await expect(page).toHaveURL('/register');
  23. });
  24. test('表单验证 - 空用户名', async ({ loginPage }) => {
  25. await loginPage.login('', testUsers.admin.password);
  26. await expect(loginPage.usernameInput).toHaveClass(/border-destructive/);
  27. });
  28. test('表单验证 - 空密码', async ({ loginPage }) => {
  29. await loginPage.login(testUsers.admin.username, '');
  30. await expect(loginPage.passwordInput).toHaveClass(/border-destructive/);
  31. });
  32. test('记住登录状态', async ({ loginPage, dashboardPage, context }) => {
  33. await loginPage.login(testUsers.admin.username, testUsers.admin.password);
  34. await dashboardPage.expectToBeVisible();
  35. // 重新打开浏览器验证登录状态保持
  36. const newPage = await context.newPage();
  37. await newPage.goto('/');
  38. await expect(newPage).toHaveURL('/');
  39. });
  40. });