如何阅读 Cypress 中的回复?

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)

Byp*_*ass 6

您可能会遇到与此处相同的问题,当网络调用具有带有 '/' 的参数时,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)