logout.cy.ts 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. import { mockLogoutSuccess } from '../../support/mock/handlers/user';
  2. import LoginPage from '../../support/pageObjects/LoginPage';
  3. import MainPage from '../../support/pageObjects/MainPage';
  4. import ExitModalPage from '../../support/pageObjects/ExitModalPage';
  5. describe('User Logout', () => {
  6. const loginPage = new LoginPage();
  7. const mainPage = new MainPage();
  8. const exitModalPage = new ExitModalPage();
  9. beforeEach(() => {
  10. // 使用封装的登录并初始化命令
  11. cy.loginAndInitialize();
  12. });
  13. it('should successfully logout and return to login page', () => {
  14. mockLogoutSuccess();
  15. // 使用 Page Object 点击退出按钮
  16. mainPage.clickExitButton();
  17. // 验证 modal 可见
  18. exitModalPage.shouldBeVisible();
  19. // 点击"注销用户"按钮
  20. exitModalPage.clickLogout();
  21. // 应该显示成功消息
  22. cy.contains('已退出登录').should('be.visible');
  23. // 应该返回登录页面
  24. loginPage.getUsernameInput().should('be.visible');
  25. loginPage.getPasswordInput().should('be.visible');
  26. });
  27. it('should clear user state after logout', () => {
  28. mockLogoutSuccess();
  29. // 使用 Page Object 执行登出
  30. mainPage.clickExitButton();
  31. exitModalPage.shouldBeVisible();
  32. exitModalPage.clickLogout();
  33. // 验证 Redux store 中用户信息已清除
  34. cy.window().its('store').invoke('getState')
  35. .its('userInfo')
  36. .should('deep.equal', {
  37. token: '',
  38. expire: 0,
  39. uid: 0,
  40. name: '',
  41. avatar: ''
  42. });
  43. });
  44. it('should close exit modal when clicking cancel', () => {
  45. // 使用 Page Object 打开退出 modal
  46. mainPage.clickExitButton();
  47. exitModalPage.shouldBeVisible();
  48. // 点击取消按钮
  49. exitModalPage.clickCancel();
  50. // modal 应该关闭
  51. exitModalPage.shouldNotBeVisible();
  52. });
  53. it('should not call backend logout API (placeholder)', () => {
  54. // 由于后端 API 尚未实现,此测试验证不会调用实际的后端接口
  55. // 当前是纯前端状态清除
  56. // 使用 Page Object 执行登出
  57. mainPage.clickExitButton();
  58. exitModalPage.shouldBeVisible();
  59. exitModalPage.clickLogout();
  60. // 验证成功消息
  61. cy.contains('已退出登录').should('be.visible');
  62. // 验证返回登录页
  63. loginPage.getUsernameInput().should('be.visible');
  64. });
  65. });