不同状态的Cypress模拟api响应

不同状态的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”) //如

我正在用Cypress测试我的登录组件(刚刚开始),我想处理API返回状态200、400或500的三种不同情况。我想模拟这些反应,看看前端是如何反应的

在向API端点发送请求时,我想模拟三种不同情况(200、400和500)的响应http://localhost:9999/api/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请求,那么。或者您必须从页面提交表单(应该有一些按钮,您可以单击)。