如何使用 cy.intercept() 对两个具有不同存根的请求进行存根?
how to stub two requests with differents stubs using cy.intercept()?
我正在尝试使用两个具有不同响应的 cy.intercept 函数来存根相同的 http GET 请求。我尝试这样做的一种方法是使用条件 if 语句。在该 if 语句中,我将调用 cy.intercept 函数。我使用布尔变量作为条件。问题是布尔变量不会根据测试场景而改变(我正在使用带有 cypress-cucumber-preprocessor 的 cypress)。我如何实现我的测试文件,以便它根据测试将条件定义为真或假,从而动态定义不同的 cy.intercept 响应?
我的测试文件:
let isValid = false
Given('I am on the "user-login" page', () => {
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', () => {
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"', () => {
cy.get('input[type="text"]').should("be.visible").type("George312")
})
When('I enter "George312"', () => {
cy.get('input[type="text"]').should("be.visible").type("George312")
})
And('I enter "hsj%2*sc5$"', () => {
cy.get('input[type="password"]').should("be.visible").type("hsj%2*sc5$")
})
And('I enter "hsj%2*sc5"', () => {
cy.get('input[type="password"]').should("be.visible").type("hsj%2*sc5")
})
And('I Click the "Submit" button', () => {
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', () => {
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!"', () => {
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"', () => {
cy.get("modal").contains("Login Failed! wrong password").should("be.visible")
})
cy.log() 就像 console.log()。我在我的代码中用红色标出了 cy.log() 的四次调用的输出。输出不使sen
这是赛普拉斯的输出:
cy.log() 就像 console.log()。我在我的代码中用红色标出了 cy.log() 的四次调用的输出。输出没有意义。就好像变量被设置为 true 并且之后永远不会改变。
我找到了解决办法。
我声明的变量必须这样声明:
this.isValid
所以它可以在文件中的其他地方访问。
其次:Given() 语句应该彼此不同。否则两者都将在两种情况下激活,导致变量值在上次初始化中被覆盖。
这样:
Given(/^I am on the "user-login" 1 page$/, () => {
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$/, () => {
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)
})
然后赛普拉斯输出变成这样:
我正在尝试使用两个具有不同响应的 cy.intercept 函数来存根相同的 http GET 请求。我尝试这样做的一种方法是使用条件 if 语句。在该 if 语句中,我将调用 cy.intercept 函数。我使用布尔变量作为条件。问题是布尔变量不会根据测试场景而改变(我正在使用带有 cypress-cucumber-preprocessor 的 cypress)。我如何实现我的测试文件,以便它根据测试将条件定义为真或假,从而动态定义不同的 cy.intercept 响应?
我的测试文件:
let isValid = false
Given('I am on the "user-login" page', () => {
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', () => {
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"', () => {
cy.get('input[type="text"]').should("be.visible").type("George312")
})
When('I enter "George312"', () => {
cy.get('input[type="text"]').should("be.visible").type("George312")
})
And('I enter "hsj%2*sc5$"', () => {
cy.get('input[type="password"]').should("be.visible").type("hsj%2*sc5$")
})
And('I enter "hsj%2*sc5"', () => {
cy.get('input[type="password"]').should("be.visible").type("hsj%2*sc5")
})
And('I Click the "Submit" button', () => {
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', () => {
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!"', () => {
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"', () => {
cy.get("modal").contains("Login Failed! wrong password").should("be.visible")
})
cy.log() 就像 console.log()。我在我的代码中用红色标出了 cy.log() 的四次调用的输出。输出不使sen
这是赛普拉斯的输出:
cy.log() 就像 console.log()。我在我的代码中用红色标出了 cy.log() 的四次调用的输出。输出没有意义。就好像变量被设置为 true 并且之后永远不会改变。
我找到了解决办法。
我声明的变量必须这样声明:
this.isValid
所以它可以在文件中的其他地方访问。
其次:Given() 语句应该彼此不同。否则两者都将在两种情况下激活,导致变量值在上次初始化中被覆盖。
这样:
Given(/^I am on the "user-login" 1 page$/, () => {
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$/, () => {
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)
})
然后赛普拉斯输出变成这样: