需要在 cypress 中从 .then() 返回响应

我正在尝试返回 .then() 的值并尝试在另一种方法中使用,但出现错误并且无法执行此操作。请帮我解决一下这个。

有没有其他方法可以退回这个

test () { 
  var a = cy.request({ 
    method: 'POST', 
    form: true, 
    url: 'https://......../token', 
    headers: { "Accept": "application/json, text/plain, /", "referer-domain": referer_domain, "Content-Type": "application/json;charset=UTF-8" }, 
    body: { 
      "client_id": "..", 
      "client_secret": "....", 
      "username": username, 
      "password": password, 
      "grant_type": "password", 
      "scope": "" 
    } 
  })
  .then(response => { return response }) 
  return a; 
}
stack overflow Need to return the response from .then() in cypress
原文答案

答案:

作者头像

如果要将其作为函数的可链接值返回,请使用 cy.wrap()

cy.get('someElement')
.then(element => {
//some code
return cy.wrap('the value or action I need to retun)
}
.then(returnedValue => {
some code that can use it
}

如果您想稍后在代码中将其作为变量访问,您可以使用 as()

cy.get('someElement')
.then(element => {
//some code
 cy.wrap(result).as('resultAllias')
}

cy.get('@resultAllias')
.then(result => {
//some code to use the result
}
作者头像

我知道这个问题很老,但如果有人像我一样遇到这个问题,问题是你正在编写针对异步赛普拉斯函数的同步代码。

附加到您的 .then()cy.request() 回调将在您的函数返回很久之后执行,因此它总是会导致 var a 未定义。

返回响应的正确方法是简单地返回 cy.request() 函数并在测试中使用 .then() 回调与响应交互。

test () { 
  // var a = cy.request({
  return cy.request({  
    method: 'POST', 
    form: true, 
    url: 'https://......../token', 
    headers: { "Accept": "application/json, text/plain, /", "referer-domain": referer_domain, "Content-Type": "application/json;charset=UTF-8" }, 
    body: { 
      "client_id": "..", 
      "client_secret": "....", 
      "username": username, 
      "password": password, 
      "grant_type": "password", 
      "scope": "" 
    } 
  })
  // .then(response => { return response }) 
  // return a; 
}

// Test code
it('works', () => {
  test().then(response => /* utilize the response here */);
});