我的测试用例很不稳定,因为有时测试会在元素出现在屏幕上之前与元素进行交互,而不是静态等待,我决定在cy.intercept()与元素交互之前等待触发的请求。
我首先使用带有一些路径参数的 PUT 请求进行了尝试,效果很好,并且在 cypress runner 上我看到别名正确地代表了端点
cy.intercept('PUT', `https://api.dev.myapp.com/api/program/v1/program/**`).as('saveProgram');
cy.wait('@saveProgram');
Run Code Online (Sandbox Code Playgroud)
我对需要 URL 中的查询参数的后端点尝试了同样的操作,但它不起作用。在运行程序中,我看不到分配给端点的别名,如下面的屏幕截图所示。
cy.intercept('POST', `https://api.dev.myapp.com/api/program/v1/program?clientId=*`)
.as('createProgram');
cy.wait('@createProgram');
Run Code Online (Sandbox Code Playgroud)
pav*_*man 11
匹配的方式有多种,即:
如果其中一个不起作用,我建议:
按照这个顺序。
我还注意到你的例子cy.wait()直接在cy.intercept(). 最有可能的是,您需要在这些命令之间触发请求的操作。我不知道您是否只是为了这个问题而简化了代码,或者这是否真的是您的代码。如果是后者,则需要返工:
cy
.intercept(...)
.as('createProgram');
// your other code that triggers the request
cy
.wait('@createProgram'); // wait for the response
Run Code Online (Sandbox Code Playgroud)
现在,让我们看看还有哪些其他选项可以编写该匹配模式:
cy
.intercept('POST', /\/api\/program\/v1\/program\?clientId=\d+/)
.as('createProgram');
Run Code Online (Sandbox Code Playgroud)
尽量避免使用完整的网址,它通常只会使您的代码变得混乱,并且在大多数情况下没有必要。
cy
.intercept('POST', 'program?clientId=*')
.as('createProgram');
Run Code Online (Sandbox Code Playgroud)
确实很宽松,但如果你做到了这一点,你可以稍后尝试更严格的匹配模式(如果你需要的话)。
cy
.intercept({
pathname: '/api/program/v1/program'
query: {
clientId: '36'
}
})
.as('createProgram');
Run Code Online (Sandbox Code Playgroud)
其中任何一个匹配正确吗?
文档中有无数其他选项。
| 归档时间: |
|
| 查看次数: |
16250 次 |
| 最近记录: |