【问题标题】:Unable to send a POST login request using Cypress无法使用赛普拉斯发送 POST 登录请求
【发布时间】:2024-05-29 19:50:02
【问题描述】:

我正在使用 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))吗?

标签: api testing request cypress end-to-end


【解决方案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('/');
    

    【讨论】:

      最近更新 更多