Imr*_*anR 0 javascript e2e-testing cypress cypress-intercept
我正在尝试使用 Cypress 12.3 为 Web 应用程序编写 E2E 测试。在旅程的某个部分,应用程序向端点“ api/v2/accountApplication/getApplicationInfo?uuid=xxxxxxx ”发出GET请求。该请求的响应包括一个名为“ abChoice.welcome ”的字段,其值为“a”或“b”。该值用于我的 Vue 应用程序中的 A/B 测试。响应的结构如下:
{
"resultStatus": true,
"errorCode": 0,
"errorMessage": null,
"resultData": {
"abChoice": {
"welcome": "a"
}
}
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试编写一个测试来检查此请求的响应,并根据“abChoice.welcome”的值做出不同的断言。我尝试使用cy.intercept命令来检查响应,但它没有按预期工作。我还尝试为请求创建别名并使用cy.wait(@myAliasName),但 Cypress 抛出错误并表示从未发出请求,即使我可以在日志中看到该请求。
describe('A/B testing', () => {
it('shows A or B pages', () => {
cy.intercept('GET', '**/accountApplication/getApplicationInfo', req => {
const { body } = req
cy.log(body)
if (body.resultData.abChoice.wlecome === 'a') {
cy.log('A')
// assert something
} else {
cy.log('B')
// assert something
}
})
})
})
Run Code Online (Sandbox Code Playgroud)
日志显示以下内容,因此肯定已发出请求。(我已删除敏感信息)
(xhr)GET 200 /api/v2/xxxx/accountApplication/getApplicationInfo?uuid=xxxx
Run Code Online (Sandbox Code Playgroud)
您可能会遇到与此处相同的问题,当网络调用具有带有 '/' 的参数时,Cypress拦截()失败。
事实上,导致问题的不是“/”,而是参数部分(后面的任何内容?),它会被视为 URL 的一部分。
根据参考问题,使用正则表达式或pathname代替url(默认)。
cy.intercept('GET', /\/accountApplication\/getApplicationInfo/, req => {
Run Code Online (Sandbox Code Playgroud)
或使用路径名时,参数将从匹配中排除
cy.intercept({method:'GET', pathname: `**/accountApplication/getApplicationInfo`}, req => {
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
431 次 |
| 最近记录: |