Ver código fonte

feat(mock): add and use two login-related mocks

ddx 3 semanas atrás
pai
commit
36696aa810
2 arquivos alterados com 51 adições e 3 exclusões
  1. 16 3
      cypress/e2e/login.cy.ts
  2. 35 0
      cypress/support/mock/handlers/user.ts

+ 16 - 3
cypress/e2e/login.cy.ts

@@ -1,4 +1,5 @@
 // import { describe, it } from 'node:test';
+import { mockLoginFail, mockLoginSuccess } from '../support/mock/handlers/user';
 import LoginPage from '../support/pageObjects/LoginPage';
 // import "cypress";
 
@@ -6,19 +7,31 @@ describe('Login Page', () => {
   const loginPage = new LoginPage();
 
   beforeEach(() => {
+    // loginPage.visit();
+    // loginPage.getUsernameInput().should('be.visible');
+    // loginPage.getPasswordInput().should('be.visible');
+    // loginPage.getSubmitButton().should('be.visible');
+  });
+
+  it('should successfully log in with correct credentials', () => {
+    mockLoginSuccess();
     loginPage.visit();
     loginPage.getUsernameInput().should('be.visible');
     loginPage.getPasswordInput().should('be.visible');
     loginPage.getSubmitButton().should('be.visible');
-  });
-
-  it('should successfully log in with correct credentials', () => {
     loginPage.login('admin', '123456');
+    cy.wait('@loginSuccess');
     cy.contains('登录成功').should('be.visible', { timeout: 10000 });
   });
 
   it('should show an error message for incorrect credentials', () => {
+    mockLoginFail();
+    loginPage.visit();
+    loginPage.getUsernameInput().should('be.visible');
+    loginPage.getPasswordInput().should('be.visible');
+    loginPage.getSubmitButton().should('be.visible');
     loginPage.login('wronguser', 'wrongpassword');
+    cy.wait('@loginFail');
     cy.contains('登录失败').should('be.visible', { timeout: 10000 });
   });
 });

+ 35 - 0
cypress/support/mock/handlers/user.ts

@@ -1 +1,36 @@
 // User-related mock handlers
+// 封装登录成功的 mock
+export function mockLoginSuccess() {
+  cy.intercept('POST', '/dr/api/v1/pub/login', (req) => {
+    req.reply({
+      statusCode: 200,
+      body: {
+        code: "0x000000",
+        description: "Success",
+        solution: "",
+        data: {
+          token: "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
+          expire: 1751277588,
+          uid: 1,
+          name: "admin",
+          avatar: ""
+        }
+      }
+    });
+  }).as('loginSuccess');
+}
+
+// 封装登录失败的 mock
+export function mockLoginFail() {
+  cy.intercept('POST', '/dr/api/v1/pub/login', (req) => {
+    req.reply({
+      statusCode: 200, // 一般还是200,通过 code 区分失败
+      body: {
+        code: "0x000001",
+        description: "Invalid username or password",
+        solution: "Please check your credentials",
+        data: {}
+      }
+    });
+  }).as('loginFail');
+}