我正在尝试使用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
2条答案
按热度按时间flmtquvp1#
你的
cy.wait()
没有成功并且你的验证从来没有运行的原因是你的拦截请求url从来没有匹配过,这是因为你的url没有包含查询参数。假设查询参数
uuid
与您的拦截无关,您可以执行如下操作,在现有url的末尾添加一个通配符:1l5u6lss2#
您可能遇到与此处Cypress intercept() fails when the network call has parameters with '/'相同的问题。
事实上,不是“/”导致了这个问题,而是参数部分(
?
之后的任何内容),它将被视为URL的一部分。根据参考问题,使用正则表达式或
pathname
代替url
(默认)。或与pathname一起使用时,参数将从匹配中排除