在赛普拉斯中,返回 Api 对另一个函数的响应显示未定义

In cypress Returning Api reponse to another function is displaying undefined

我正在从 CallApi() 调用一个函数 GetApiResponse() ,它返回一个 Api 响应的对象。如果我在 GetApiResponse() 中打印该响应,则在控制台中显示完整的对象。 但是我将它传递给 CallApi 函数中的 'passstatus' 变量。但这里显示未定义。我尝试了 JSON.Stringyfy() 东西,但它对我不起作用。

我想在 ApiCall 函数中使用 GetApiResponse() 函数的响应。

it("ApiCall", function(){

        function testCallBack(){

            var passstatus=GetApiResponse(testData2)
            setTimeout(()=>{
            console.log(passstatus) //This returns undefined
           expect(passstatus.status).to.equal("pass")
            },15000);
        
        }

      testCallBack();


})

 function GetApiResponse(testData2){
      cy.request({
          method: "GET",
          url: `https://test.orders.com//admin/api/2022-01/orders.json?name=%23${testData2.orderId}&status=any`,
          headers: {
            Accept: 'application/json',
            "Content-Type": 'application/json',
            "Access-Token": "XXXXXXXXXXX"
          }
        }).then(response =>{
            const jsonData = response.body.orders[0];
            console.log(jsonData)
            return jsonData;
        })
}

Return外层请求,否则忽略内层return jsonData

function GetApiResponse(testData2) {
  return cy.request({
           ...
         }).then(response => {
           return response.body.orders[0];
        })
}

它是异步的,所以使用 .then()

GetApiResponse(testData2).then(passstatus => {
  ... // use passStatus here
})

或使用别名

function GetApiResponse(testData2) {
  cy.request({
    ...
  }).then(response => {
    return response.body.orders[0];
  })
  .as('passstatus')    // store to an alias
}
GetApiResponse(testData2)
cy.get('@passstatus').then(passstatus => {
  ... // use passStatus here
})