javascript 如何阅读Cypress中的回复?

3xiyfsfu  于 2023-01-16  发布在  Java
关注(0)|答案(2)|浏览(123)

我正在尝试使用Cypress12.3为一个Web应用程序编写一个E2 E测试。应用程序向端点“API/v2/accountApplication/getApplicationInfo?uuid=xxxxxxx"发出GET请求。此请求的响应包括名为“abChoice.welcome”的字段,该字段的值为“a”或“b”。此值用于A/B在我的Vue应用程序中测试。响应的结构如下所示:

{
    "resultStatus": true,
    "errorCode": 0,
    "errorMessage": null,
    "resultData": {
        "abChoice": {
            "welcome": "a"
        }
    }
}

我正在尝试编写一个测试,用于检查此请求的响应,并根据“abChoice.welcome”的值进行不同的Assert。我已尝试使用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
      }
    })
  })
})

日志显示以下内容,因此请求肯定正在进行中。(我已删除敏感信息)

(xhr)GET 200 /api/v2/xxxx/accountApplication/getApplicationInfo?uuid=xxxx
flmtquvp

flmtquvp1#

你的cy.wait()没有成功并且你的验证从来没有运行的原因是你的拦截请求url从来没有匹配过,这是因为你的url没有包含查询参数。
假设查询参数uuid与您的拦截无关,您可以执行如下操作,在现有url的末尾添加一个通配符:

cy.intercept('GET', '**/accountApplication/getApplicationInfo*', (req) => { ... });
1l5u6lss

1l5u6lss2#

您可能遇到与此处Cypress intercept() fails when the network call has parameters with '/'相同的问题。
事实上,不是“/”导致了这个问题,而是参数部分(?之后的任何内容),它将被视为URL的一部分。
根据参考问题,使用正则表达式或pathname代替url(默认)。

cy.intercept('GET', /\/accountApplication\/getApplicationInfo/, req => {

或与pathname一起使用时,参数将从匹配中排除

cy.intercept({method:'GET', pathname: `**/accountApplication/getApplicationInfo`}, req => {

相关问题