如何在 Cypress 中获得 POST API 响应?

How to get POST API response in Cypress?

我正在开发一个使用 Cypress 实现自动化的项目。在这个项目中,我需要为患者创建订单。当我单击提交按钮时,它将使用 POST 方法调用以下 API https://ibis-dev.droicelabs.us/api/dispenser/orders/ 和 return 我想要获得的唯一订单。

我已经注册了 cy.intercept 我的测试是这样的:

cy.intercept({
    method: 'POST',
    url: 'https://ibis-dev.droicelabs.us/api/dispenser/orders/',
}).as('ordersCall')

点击提交按钮时我使用了:

cy.clickOnElementUsingXpath(practicePageSelectors.submit_CreateOrderButton); // click on submit button
cy.wait('@ordersCall')
    .its('response.body')
    .then((body) => {
        // parsing might be not needed always, depends on the api response
        const bodyData = JSON.parse(body)
        cy.log(bodyData)
    })

但它 return 出现以下错误:

Timed out retrying after 5000ms: cy.wait() timed out waiting 5000ms for the 1st request to the route: ordersCall. No request ever occurred in cy.wait('@ordersCall')

谁能帮我弄一个orderID?有没有其他方式获取orderID?

检查问题评论中提供的图像后,错误如下:您在 Cypress 测试中的拦截命令正在等待向您的 DEV 环境发出请求,但是从控制台查看您的最后一张图像Cypress 测试运行程序正在向 QA 环境提出您的请求。

所以你要么必须像这样调整你的拦截器:

cy.intercept({
    method: 'POST',
    url: 'https://ibis-qa.droicelabs.us/api/dispenser/orders/',
}).as('ordersCall')

或考虑使用相对路径进行API调用以独立于环境:

cy.intercept({
    method: 'POST',
    url: '/api/dispenser/orders/',
}).as('ordersCall')