enterprise-mini-login.spec.ts 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. import { test, expect } from '../../utils/test-setup';
  2. /**
  3. * 企业小程序登录 E2E 测试
  4. *
  5. * 测试企业用户通过小程序登录的功能,验证:
  6. * - 登录失败场景
  7. * - 表单验证
  8. *
  9. * 注意:
  10. * - 登录成功、Token 持久性、退出登录等测试需要预创建测试用户
  11. * - 这些测试需要在独立测试套件中运行,使用专用的 page context
  12. * - 当前测试文件专注于不需要用户创建的测试场景
  13. *
  14. * @see {@link ../pages/mini/enterprise-mini.page.ts} EnterpriseMiniPage
  15. */
  16. test.describe('企业小程序登录功能', () => {
  17. test.describe('表单验证测试 (AC3)', () => {
  18. test('手机号为空时应该显示错误提示', async ({ enterpriseMiniPage }) => {
  19. // 导航到登录页面
  20. await enterpriseMiniPage.goto();
  21. // 不填写任何信息,直接点击登录按钮
  22. await enterpriseMiniPage.clickLoginButton();
  23. // 验证仍然在登录页面(未跳转)
  24. const currentUrl = enterpriseMiniPage.page.url();
  25. expect(currentUrl).toContain('/mini');
  26. // 验证登录页面容器仍然可见
  27. await expect(enterpriseMiniPage.loginPage).toBeVisible();
  28. });
  29. test('密码为空时应该显示错误提示', async ({ enterpriseMiniPage }) => {
  30. // 导航到登录页面
  31. await enterpriseMiniPage.goto();
  32. // 只填写手机号,不填写密码
  33. await enterpriseMiniPage.fillPhone('13800138000');
  34. // 尝试点击登录按钮
  35. await enterpriseMiniPage.clickLoginButton();
  36. // 验证仍然在登录页面(未跳转)
  37. const currentUrl = enterpriseMiniPage.page.url();
  38. expect(currentUrl).toContain('/mini');
  39. // 验证登录页面容器仍然可见
  40. await expect(enterpriseMiniPage.loginPage).toBeVisible();
  41. });
  42. test('表单验证错误提示应该清晰可见', async ({ enterpriseMiniPage }) => {
  43. // 导航到登录页面
  44. await enterpriseMiniPage.goto();
  45. // 不填写任何信息,直接点击登录
  46. await enterpriseMiniPage.clickLoginButton();
  47. // 验证仍在登录页面
  48. expect(enterpriseMiniPage.page.url()).toContain('/mini');
  49. // 验证登录页面容器仍然可见
  50. await expect(enterpriseMiniPage.loginPage).toBeVisible();
  51. });
  52. });
  53. test.describe('登录失败测试 (AC2)', () => {
  54. test('使用不存在的用户名登录失败', async ({ enterpriseMiniPage }) => {
  55. // 导航到登录页面
  56. await enterpriseMiniPage.goto();
  57. // 使用不存在的用户名尝试登录(使用有效的手机号格式)
  58. const fakeUsername = `199${Date.now().toString().slice(-8)}`; // 11位数字,符合手机号格式
  59. await enterpriseMiniPage.login(fakeUsername, 'password123');
  60. // 验证显示错误提示
  61. await enterpriseMiniPage.expectLoginError('用户名或密码错误');
  62. // 验证未存储 token
  63. const token = await enterpriseMiniPage.getToken();
  64. expect(token).toBeNull();
  65. });
  66. test('使用错误的密码登录失败', async ({ enterpriseMiniPage }) => {
  67. // 导航到登录页面
  68. await enterpriseMiniPage.goto();
  69. // 使用不存在的用户尝试登录(使用有效的手机号格式)
  70. await enterpriseMiniPage.login('19912345678', 'wrongpassword');
  71. // 验证显示错误提示
  72. await enterpriseMiniPage.expectLoginError('用户名或密码错误');
  73. // 验证未存储 token
  74. const token = await enterpriseMiniPage.getToken();
  75. expect(token).toBeNull();
  76. });
  77. test('错误提示内容应该正确', async ({ enterpriseMiniPage }) => {
  78. // 导航到登录页面
  79. await enterpriseMiniPage.goto();
  80. // 使用错误的凭据尝试登录(使用有效的手机号格式)
  81. await enterpriseMiniPage.login('19987654321', 'wrongpassword');
  82. // 验证错误提示包含"用户名或密码错误"或类似内容
  83. await enterpriseMiniPage.expectLoginError();
  84. });
  85. });
  86. test.describe.skip('基本登录成功测试 (AC1) - 需要预创建测试用户', () => {
  87. // 这些测试需要预创建的测试用户
  88. // 应该在独立的测试套件中运行,使用专用的 page context
  89. test('应该成功登录企业小程序', async ({ enterpriseMiniPage: _enterpriseMiniPage }) => {
  90. // TODO: 需要预创建测试用户
  91. // 1. 在独立测试套件中创建测试用户
  92. // 2. 使用该用户登录小程序
  93. // 3. 验证登录成功
  94. });
  95. test('登录成功后应该显示用户信息', async ({ enterpriseMiniPage: _enterpriseMiniPage }) => {
  96. // TODO: 需要预创建测试用户
  97. });
  98. test('登录成功后 token 应该正确存储', async ({ enterpriseMiniPage: _enterpriseMiniPage }) => {
  99. // TODO: 需要预创建测试用户
  100. });
  101. });
  102. test.describe.skip('Token 持久性测试 (AC4) - 需要预创建测试用户', () => {
  103. // 这些测试需要预创建的测试用户
  104. test('页面刷新后 token 仍然有效', async ({ enterpriseMiniPage: _enterpriseMiniPage }) => {
  105. // TODO: 需要预创建测试用户
  106. });
  107. test('使用已存储 token 可以继续访问', async ({ enterpriseMiniPage: _enterpriseMiniPage }) => {
  108. // TODO: 需要预创建测试用户
  109. });
  110. });
  111. test.describe.skip('退出登录测试 (AC5) - 需要预创建测试用户', () => {
  112. // 这些测试需要预创建的测试用户
  113. test('应该成功退出登录', async ({ enterpriseMiniPage: _enterpriseMiniPage }) => {
  114. // TODO: 需要预创建测试用户
  115. });
  116. test('退出后 token 应该被清除', async ({ enterpriseMiniPage: _enterpriseMiniPage }) => {
  117. // TODO: 需要预创建测试用户
  118. });
  119. test('退出后无法访问需要认证的页面', async ({ enterpriseMiniPage: _enterpriseMiniPage }) => {
  120. // TODO: 需要预创建测试用户
  121. });
  122. });
  123. });