javascript 如何通过函数返回cy.请求的响应

yduiuuwa  于 2023-06-04  发布在  Java
关注(0)|答案(4)|浏览(251)

我正在尝试使用以下函数传递API请求的结果:

Add(someName) {
        cy.request ({
            method: 'POST',
            url: someURL,
            body: {
                name: someName
            }
        }).then(function(response){
            return response
        })
    }

然而,当我尝试调用这个函数时,它并没有给予我响应的内容(它给了我Undefined)。我认为这可能与异步性(如果这是一个词的话)或对象的范围有关,因此尝试对响应进行别名化或在函数外部定义一个对象(然后将响应分配给该对象),没有任何运气。

oewdyzsn

oewdyzsn1#

您只需要在cy.request()调用中使用return

Add(someName) {
  return cy.request ({...})
    .then(function(response) {
      return response.body      // maps the response to it's body
    })                         // so return value of function is response.body 
}

返回值类型是Chainer(与所有Cypress命令的类型相同),因此您必须***在其上使用.then()

myPO.Add('myName').then(body => ...

cy.request()后不需要.then()

如果你想要完整的答案,

Add(someName) {
  return cy.request ({...})    // don't need a .then() after this 
                              // to return full response
}

如何等待结果

如果要等待结果,请使用如下所示的Cypress.Promise

Add(someName) {
  return new Cypress.Promise((resolve, reject) => {
    cy.request ({...})
      .then(response => resolve(response))
  })
}

等待

const response = await myPO.Add('myName')
5lhxktic

5lhxktic2#

你应该尝试在函数中返回一些东西:

Add(someName)
{
    return cy.request ({
        method: 'POST',
        url: someURL,
        body: {
            name: someName
        }
    }).then(function(response){
        return response
    })
}

然后获取返回的值:

Add('val').then((data) => {console.log(data)})
58wvjzkj

58wvjzkj3#

这可以使用cy.wrap来完成!
在下面的例子中,你可以在返回之前做任何事情:

export const add = (someName) => {
  cy.request({
    method: 'POST',
    url: someURL,
    body: {
        name: someName
    }
}).then((resp) => {
    cy.wrap(resp)
      .as('requestResp')
  })

   // Here you can do anything

  return cy.get('@requestResp')
}
3z6pesqy

3z6pesqy4#

让我们尝试以下操作:返回此函数的响应,

function getApiResponse(): Cypress.ObjectLike {

     return cy.request ({
        method: 'POST',
        url: someURL,
        body: {
            name: someName
        }
    })
}

然后在需要的地方调用它:

getApiResponse().then(response => {
  cy.log(response);
});

相关问题