【问题标题】:Is there any way I can wait for the gql api request in cypress?有什么办法可以在柏树中等待 gql api 请求?
【发布时间】:2022-02-19 11:46:31
【问题描述】:

我对赛普拉斯完全陌生。在我希望我的测试运行之前,我正在尝试一种等待 gql API 响应的方法。例如,当我访问一个页面/users 时,调用gql 来获取用户列表,只有在调用解决后,我们才会在页面上显示用户配置文件。因此,为了测试用户配置文件是否正确显示,我需要等待 API 响应。目前,我正在使用cy.wait(10000) 来解决这个问题。但是,显然这很糟糕,因为 API 调用没有在 10 秒内完成,所以测试有时不会通过。 还有另一种可行的方法。

cy.request({
 url :"gql-url",
 body :{query :`query`}
})
.then(res => **write the test here**)

如果我喜欢上面的方法,它确实有效。但是,我不确定这是否是一个好方法,因为我没有看到有人提到这样做。我多年来一直在寻找解决这个问题的方法。如果您能帮助我,我将不胜感激。

【问题讨论】:

    标签: graphql cypress


    【解决方案1】:

    您可以输入alias on the the request,然后等待别名,测试将花费请求所需的时间(至少是等待部分)。

    cy.request({
     url :"gql-url",
     body :{query :`query`}
    })
    .as('gql')
    
    cy.wait('@gql')
      .then(res => {
        // anything that needs res
      })
    
    // other things that don't need res
    cy.get('ul#users')...
    

    【讨论】:

      【解决方案2】:

      我有完全相同的情况,我通过使用intercept(Waiting-on-a-request)解决了这个问题。

      // Update 'GET' method and uri '/users' accordingly to your app. You can check logs of Cypress runner for these information.
      cy.intercept('GET', '/users').as('getAllUsers') 
      cy.request({
       url :"gql-url",
       body :{query :`query`}
      })
      cy.wait('@getAllUsers')

      【讨论】:

      • 错了——你不能拦截来自测试的请求。
      • 感谢@Seke 提供非常有趣的信息。请把这方面的文件发给我好吗?
      • 它在你上面链接的拦截页面上。但实际上很容易尝试一下。
      • 嗯,我没有看到任何关于在测试中使用拦截的信息。实际上,我在很多测试中都使用它。不确定我们是否在谈论同一件事。 Anw,谢谢你的信息!
      • 它说“cy.intercept() 无法使用 cy.request() 进行调试!赛普拉斯仅拦截请求由您的前端应用程序发出"
      猜你喜欢
      • 2020-08-10
      • 2017-05-21
      • 2021-09-15
      • 2019-05-09
      • 1970-01-01
      • 2020-06-08
      • 2018-09-08
      • 2014-11-25
      • 2022-06-13
      相关资源
      最近更新 更多