normal-login.cy.ts 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. /**
  2. * 测试文件: 阶段1-登录与注册
  3. * 路径: 路径1-正常登录
  4. *
  5. * 路径分析:
  6. * - POM: LoginPage, MainPage
  7. * - Mock: mockLoginSuccess()
  8. * - 规格:
  9. * ✓ 用户名输入框可见
  10. * ✓ 密码输入框可见
  11. * ✓ 登录按钮可见
  12. * ✓ 登录成功提示显示
  13. * ✓ 跳转到主界面
  14. * - 需要新建: 无
  15. * - 需要添加: 无
  16. * - 已有的data-testid:
  17. * - login-username-input - 用户名输入框
  18. * - login-password-input - 密码输入框
  19. * - login-submit-button - 登录按钮
  20. * - patient_management, register, worklist - MainPage导航按钮
  21. */
  22. import { mockLoginSuccess } from '../../support/mock/handlers/user';
  23. import LoginPage from '../../support/pageObjects/LoginPage';
  24. import MainPage from '../../support/pageObjects/MainPage';
  25. describe('阶段1:登录与注册 - 路径1:正常登录', () => {
  26. const loginPage = new LoginPage();
  27. const mainPage = new MainPage();
  28. beforeEach(() => {
  29. // 设置Mock API
  30. mockLoginSuccess();
  31. });
  32. it('应该成功登录并进入主界面', () => {
  33. /**
  34. * Given: 用户在登录页面
  35. * 步骤1: 打开登录界面
  36. */
  37. loginPage.visit();
  38. // 验证登录页面元素可见
  39. // 步骤2-4的前置条件:验证输入框和按钮可见
  40. loginPage.getUsernameInput().should('be.visible');
  41. loginPage.getPasswordInput().should('be.visible');
  42. loginPage.getSubmitButton().should('be.visible');
  43. /**
  44. * When: 用户输入正确的账号密码并点击登录
  45. * 步骤2: 输入账号
  46. * 步骤3: 输入密码
  47. * 步骤4: 点击登录
  48. */
  49. loginPage.login('admin', '123456');
  50. /**
  51. * Then: 系统验证账号密码
  52. * 步骤5: 系统验证账号密码
  53. */
  54. // 等待登录API响应
  55. cy.wait('@loginSuccess').then((interception) => {
  56. // 验证API响应
  57. expect(interception.response?.statusCode).to.eq(200);
  58. expect(interception.response?.body.code).to.eq('0x000000');
  59. expect(interception.response?.body.data.name).to.eq('admin');
  60. });
  61. /**
  62. * Then: 登录成功,显示成功提示,进入主界面
  63. * 步骤6: 登录成功 → 进入主界面
  64. */
  65. // 验证登录成功提示显示
  66. cy.contains('登录成功').should('be.visible', { timeout: 10000 });
  67. // 验证进入主界面 - 患者管理按钮可见
  68. cy.get('[data-testid="patient_management"]').should('be.visible');
  69. });
  70. });