带有查询参数的POST端点的cy.intercept() [英] cy.intercept() for post endpoints with query parameters
本文介绍了带有查询参数的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');
推荐答案
有不同的匹配方式,即:
- 文字字符串
- 全局模式
- 正则表达式模式
- 路由匹配器对象
如果一个不起作用,我建议:
- 简化匹配模式,这将使其更具允许性,您可以稍后构建更严格的版本
- 尝试不同的匹配方法
按此顺序。
我还注意到您的示例在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屋!
查看全文