как заглушить два запроса разными заглушками, используя cy.intercept()?

#javascript #http #cucumber #cypress #cypress-cucumber-preprocessor

#язык JavaScript #http #огурец #кипарис #кипарис-огурец-препроцессор

Вопрос:

Я пытаюсь заглушить один и тот же http-запрос GET, используя две функции cy.intercept с разными ответами. Один из способов, которым я пытался это сделать, — использовать условный оператор if. Внутри этого оператора if я бы вызвал функцию cy.intercept. В качестве условия я использовал логическую переменную. Проблема в том, что логическая переменная не изменяется в зависимости от тестового сценария (я использую cypress с препроцессором cypress-cucumber). Как я могу реализовать свой тестовый файл таким образом, чтобы он определял условие как истинное или ложное в зависимости от теста, таким образом, в свою очередь, динамически определяя другой ответ cy.intercept?

мой тестовый файл:

 let isValid = false   Given('I am on the "user-login" page', () =gt; {  cy.log(isValid)  cy.visit("http://localhost:8080/user-login")  cy.title().should('eq',"User Login Page")  isValid = true  cy.log(isValid)  })   Given('I am on the "user-login" page', () =gt; {  cy.log(isValid)  cy.visit("http://localhost:8080/user-login")  cy.title().should('eq',"User Login Page")   isValid = false  cy.log(isValid)  })   When('I enter "George312"', () =gt; {    cy.get('input[type="text"]').should("be.visible").type("George312")  })   When('I enter "George312"', () =gt; {  cy.get('input[type="text"]').should("be.visible").type("George312")  })    And('I enter "hsj%2*sc5$"', () =gt; {   cy.get('input[type="password"]').should("be.visible").type("hsj%2*sc5$")   })   And('I enter "hsj%2*sc5$3"', () =gt; {   cy.get('input[type="password"]').should("be.visible").type("hsj%2*sc5$3")   })    And('I Click the "Submit" button', () =gt; {  if(isValid === true){  cy.intercept('api/users',  {  "body": { "isAuthenticated": true}  }  ).as("loginUser")  }    cy.get('button[id="LoginBtn"]').should('be.visible').click()  cy.wait(2000)  cy.wait("@loginUser")  })    And('I Click the "Submit" button', () =gt; {  isValid = false  if(isValid === false){  cy.intercept('api/users',  {  "body": { "isAuthenticated": false}  }  ).as("loginUser")  }  cy.get('button[id="LoginBtn"]').should('be.visible').click()  cy.wait(2000)  cy.wait("@loginUser")  })    Then('I should see written in a window user "George312 is now logged in!"', () =gt; {   cy.get("p").contains('user "George312 is now logged in!"').should("be.visible")    })   Then('I should see written in a window user "Login Failed! wrong password"', () =gt; {   cy.get("modal").contains("Login Failed! wrong password").should("be.visible")  })   

cy.log() похож на console.log(). Я указал красным цветом выходные данные четырех вызовов cy.log() в своем коде. Вывод не делает sen Вот вывод cypress: введите описание изображения здесь

cy.log() похож на console.log(). Я указал красным цветом выходные данные четырех вызовов cy.log() в своем коде. Вывод не имеет смысла. это похоже на то, как если бы переменная была установлена в значение true и впоследствии никогда не менялась.

Ответ №1:

Я нашел решение. Переменная, которую я объявляю, должна быть объявлена таким образом: this.isValid чтобы к ней можно было получить доступ в другом месте файла. Во-вторых: Приведенные() утверждения должны отличаться друг от друга. В противном случае оба будут активированы в обоих сценариях, что приведет к переопределению значения переменной при последней инициализации.

как таковой:

 Given(/^I am on the "user-login" 1 page$/, () =gt; {  cy.visit("http://localhost:8080/user-login")  cy.title().should('eq',"User Login Page")  this.isValid = true  cy.log(this.isValid) }) Given(/^I am on the "user-login" page$/, () =gt; {  cy.log(this.isValid)  cy.visit("http://localhost:8080/user-login")  cy.title().should('eq',"User Login Page")   this.isValid = false  cy.log(this.isValid) })   

и тогда выход кипариса становится таким:

введите описание изображения здесь