不同状态的Cypress模拟api响应
我正在用Cypress测试我的登录组件(刚刚开始),我想处理API返回状态200、400或500的三种不同情况。我想模拟这些反应,看看前端是如何反应的 在向API端点发送请求时,我想模拟三种不同情况(200、400和500)的响应http://localhost:9999/api/login 我已经写了一些基于文档的代码,但我仍然没有达到我想要的程度不同状态的Cypress模拟api响应,cypress,Cypress,我正在用Cypress测试我的登录组件(刚刚开始),我想处理API返回状态200、400或500的三种不同情况。我想模拟这些反应,看看前端是如何反应的 在向API端点发送请求时,我想模拟三种不同情况(200、400和500)的响应http://localhost:9999/api/login 我已经写了一些基于文档的代码,但我仍然没有达到我想要的程度 description('Login Approach',()=>{ 它('login',()=>{ cy.visit(“/login”) //如
description('Login Approach',()=>{
它('login',()=>{
cy.visit(“/login”)
//如果模仿是正确的,这些值email和pw应该不重要
cy.get(“#电子邮件”)
.type(“测试”)
.should('have.value','test')
cy.get(“#密码”)
.type('123456')
.should('have.value','123456')
cy.server()
赛道({
方法:“POST”,
网址:'http://localhost:9999/api/login“,//这是我向其发送请求的api
})
cy.location('pathname',{timeout:10000}).should('eq','/login');
cy.title()应('include','Condeo')
cy.get(“#通知”)。应('exist')
})
})
我没有得到测试细节中的状态:
Method Url Stubbed Alias #
POST http://localhost:9999/api/login Yes -
您应该使用cypress的
wait
方法
您可以找到cypress文档
对于您的用例,请确保在访问链接之前启动服务器并定义路由。访问链接后,使用cy.wait()
方法等待API调用完成
例如
description('Login Approach',()=>{
它('login',()=>{
cy.visit(“/login”)
//如果模仿是正确的,这些值email和pw应该不重要
cy.get(“#电子邮件”)
.type(“测试”)
.should('have.value','test')
cy.get(“#密码”)
.type('123456')
.should('have.value','123456')
cy.server()
赛道({
方法:“POST”,
网址:'http://localhost:9999/api/login“,//这是我向其发送请求的api
}).as('登录')
cy.location('pathname',{timeout:10000}).should('eq','/login');
cy.title()应('include','Condeo')
cy.get(“#通知”)。应('exist')
//尝试访问登录API的代码。
cy.wait('@login')。然后((xhr)=>{
如果(xhr.status==200){
//状态为200时要测试的代码
}否则如果(xhr.status==400){
//状态为400时要测试的代码
}否则{
//当状态为上述任何状态时要测试的代码。
}
})
})
})
您应该使用cypress的等待
方法
您可以找到cypress文档
对于您的用例,请确保在访问链接之前启动服务器并定义路由。访问链接后,使用cy.wait()
方法等待API调用完成
例如
description('Login Approach',()=>{
它('login',()=>{
cy.visit(“/login”)
//如果模仿是正确的,这些值email和pw应该不重要
cy.get(“#电子邮件”)
.type(“测试”)
.should('have.value','test')
cy.get(“#密码”)
.type('123456')
.should('have.value','123456')
cy.server()
赛道({
方法:“POST”,
网址:'http://localhost:9999/api/login“,//这是我向其发送请求的api
}).as('登录')
cy.location('pathname',{timeout:10000}).should('eq','/login');
cy.title()应('include','Condeo')
cy.get(“#通知”)。应('exist')
//尝试访问登录API的代码。
cy.wait('@login')。然后((xhr)=>{
如果(xhr.status==200){
//状态为200时要测试的代码
}否则如果(xhr.status==400){
//状态为400时要测试的代码
}否则{
//当状态为上述任何状态时要测试的代码。
}
})
})
})
您好,感谢您的回复,我收到“cy.wait()在等待5000ms后超时,等待发送到路由的第一个请求:登录。从未发生任何请求。”是的,您必须访问URL。从页面或使用cypress请求。此外,cypress默认情况下不支持FetchAPI。它只支持XHR请求。因此,如果您的页面使用fetch API,请在cypress.json
中将experimentalFetchPolyfill
设置为true
,谢谢,我将该道具添加到cypress.json
。我在哪里可以在文档中找到有关访问URL的更多详细信息?如果您想从cypress请求,那么。或者您必须从页面提交表单(应该有一些按钮,您可以单击)。您好,感谢您的回复,我收到“cy.wait()在等待5000ms后超时,等待发送到路由的第一个请求:登录。从未发生任何请求。”是的,您必须访问URL。从页面或使用cypress请求。此外,cypress默认情况下不支持FetchAPI。它只支持XHR请求。因此,如果您的页面使用fetch API,请在cypress.json
中将experimentalFetchPolyfill
设置为true
,谢谢,我将该道具添加到cypress.json
。我在哪里可以在文档中找到有关访问URL的更多详细信息?如果您想从cypress请求,那么。或者您必须从页面提交表单(应该有一些按钮,您可以单击)。