#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) })
и тогда выход кипариса становится таким: