无法使用赛普拉斯发送 POST 登录请求
Posted
技术标签:
【中文标题】无法使用赛普拉斯发送 POST 登录请求【英文标题】:Unable to send a POST login request using Cypress 【发布时间】:2021-10-26 05:40:39 【问题描述】:我正在使用 Cypress 为网站编写端到端测试,并希望发出 API POST 请求来验证用户身份。
我已经能够发出一个带有适当 jwt 的 200 响应代码的请求。
这是请求的代码 sn-p:
Cypress.Commands.add('login', () =>
cy.request(
method: 'POST',
url: 'https://api.website.com/api/login',
body:
email: "xxx",
password: "xxx"
).then((resp) =>
window.localStorage.setItem('jwt', resp.body.token)
// console.log(resp.body.token)
cy.log(resp)
)
cy.visit('/')
这是赛普拉斯测试输出的图像: Cypress test
这是 Chrome 控制台的图像,显示了成功的响应代码: Chrome console
阅读Cypress command log后,我注意到白色圆圈表示请求无法到达服务器(请求被存根)。发生这种情况的可能原因是什么?
提前致谢!
【问题讨论】:
“白色圆圈”是什么意思?你可以试试这个cy.log(JSON.stringify(resp))
吗?
【参考方案1】:
在这个section of the docs
cy.intercept() 无法使用 cy.request() 进行调试! Cypress 仅拦截您的前端应用程序发出的请求。
这意味着您在测试中发出的任何cy.request()
都不能被拦截,因此不能被存根。
我会说白色圆圈表示响应是从浏览器缓存中提供的(只是猜测)。
【讨论】:
【参考方案2】:更新
我已经设法解决了我的问题。但是,该请求有效,我没有在本地存储中设置正确的数据以进行身份验证。使用谷歌浏览器开发者工具后,发现请求后需要设置 auth._token.local 和 auth.refresh_token.local。我附上了下面的代码 sn-p 以帮助遇到类似问题的任何人。谢谢。
cy.request(
method: 'POST',
url: 'http://127.0.0.1:8000/api/login',
body:
email: "email",
password: "password",
).then((resp) =>
localStorage.setItem('auth._token.local', 'Bearer ' + resp.body.token)
localStorage.setItem('auth._refresh_token.local', false)
);
cy.visit('/');
【讨论】:
以上是关于无法使用赛普拉斯发送 POST 登录请求的主要内容,如果未能解决你的问题,请参考以下文章