2

我从 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;
        })
}

4

1 回答 1

0

返回外部请求,否则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
})
        
于 2022-03-01T02:31:23.240 回答