带有查询参数的POST端点的cy.intercept() [英] cy.intercept() for post endpoints with query parameters

查看:22
本文介绍了带有查询参数的POST端点的cy.intercept()的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的测试用例不稳定,因为有时测试在元素出现在屏幕之前与其交互,而不是静电等待,我决定在与元素交互之前使用cy.intercept()等待触发的请求。

我首先使用带有一些路径参数的PUT请求进行了尝试,它工作得很好,并且在Cypress Runner上我看到别名正确地表示了端点

 cy.intercept('PUT', `https://api.dev.myapp.com/api/program/v1/program/**`).as('saveProgram');
 cy.wait('@saveProgram');

我对要求URL中包含查询参数的POST端点尝试了相同的方法,但不起作用。在Runner中,我看不到分配给终结点的别名,如下面的屏幕截图所示。

 cy.intercept('POST', `https://api.dev.myapp.com/api/program/v1/program?clientId=*`)
                    .as('createProgram');
 cy.wait('@createProgram');

推荐答案

有不同的匹配方式,即:

  • 文字字符串
  • 全局模式
  • 正则表达式模式
  • 路由匹配器对象

如果一个不起作用,我建议:

  1. 简化匹配模式,这将使其更具允许性,您可以稍后构建更严格的版本
  2. 尝试不同的匹配方法

按此顺序。

我还注意到您的示例在cy.intercept()之后紧跟着cy.wait()。最有可能的是,您需要在这些命令之间触发请求的操作。我不知道您是仅仅为了这个问题而简化代码,还是这确实是您的代码。如果是后者,则需要返工:

cy
  .intercept(...)
  .as('createProgram');

// your other code that triggers the request

cy
  .wait('@createProgram'); // wait for the response
现在,让我们看看您还可以编写哪些其他匹配模式:
cy
  .intercept('POST', //api/program/v1/program?clientId=d+/)
  .as('createProgram');

请尽量避免完整的url,它通常只会使您的代码变得混乱,而且在大多数情况下不是必需的。

cy
  .intercept('POST', 'program?clientId=*')
  .as('createProgram');

真的很宽松,但如果您实现了此功能,则可以在以后进行更严格的匹配模式(如果需要)。

cy
  .intercept({
    pathname: '/api/program/v1/program'
    query: {
      clientId: '36'
    }
  })
  .as('createProgram');

其中是否有匹配正确的项?

docs中有无数其他选项。

这篇关于带有查询参数的POST端点的cy.intercept()的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆