赛普拉斯如何在另一个请求中使用 JSON 响应 属性

cypress how to use JSON response property in another request

我似乎在与 cy.request 的响应 body 交互时遇到问题。我有两个 API 调用,它们都在单独工作。我想从第一次调用的响应数组中发送一个 id 以供第二次调用使用。

Cypress.Commands.add('POST_and_PATCH_Order',() => {
    cy.fixture('orderEntry.json').then((fileBody)=>{

      cy.request({
          method:'POST',
          url:'/api/OrderEntry',
          json: true,
          body: fileBody
      })
    })
    .then(response => {     

        return new Promise(resolve => {
            const target = response.body;
            resolve(target)
        })
    })
})

然后用

测试
it("An order may be set to delivered", ()=>{

  cy.POST_and_PATCH_Order().then(order =>{
      const OrderId_val = order['OrderId'];
      cy.request({
        method:'PATCH',
        url:'/api/OrderManager/StatusDelivered',
        json: true,
        body: {
          "OrderId": OrderId_val,
          "ActualPickupDate": "2020-06-08T15:34:20.035Z",
          "ActualDeliveryDate": "2020-06-08T15:34:20.035Z",
          "DeliveryReceiptName": "string"
        }
      })
  })
})

如上发送 OrderId_val 会收到 404 响应,请求 body 未提供 OrderId 的值。将订单作为 OrderId 发送会导致整个响应 header 作为 OrderId (Body: {"OrderId":[{"OrderId":3588901,"OrderType":"Order","Uuid":"1591821576913"}],"ActualPickupDate":"2020-06-08T15:34:20.035Z","ActualDeliveryDate":"2020-06-08T15:34:20.035Z","DeliveryReceiptName":"string"})

发送

我已经尝试在 command.js 和测试中与 response.body 进一步交互,但遇到 NullReferenceException 结果。对于从 POST 响应访问 OrderId 值以用于后续 PATCH 调用的任何帮助,我们将不胜感激。

您的 fileBody 具有 array 格式的数据:[{"OrderId":3588901,"OrderType":"Order","Uuid":"1591821576913"}]

你应该读成order[0].OrderId