使用Cypress做API测试时报期望对象含count属性错误如何解决
问题原因
- 配置了
failOnStatusCode: false后,接口返回4xx/5xx错误时测试不会直接终止,此时响应体为错误提示对象,仅包含message、detail两个字段,不存在需要断言的count字段,直接断言就会触发报错。 - 不必要的序列化操作冗余:Cypress的
cy.request会自动将application/json类型的响应解析为JS对象,无需手动执行JSON.parse(JSON.stringify(Response.body))做二次处理。 - 断言值类型可能不匹配:如果接口返回的
count为数字类型,使用字符串'27'做断言会因类型不一致触发错误。
修复方案
首先需要先校验接口请求状态是否正常,确认请求成功后再对count字段做断言,修复后代码如下:
cy.request({ method:'GET', url:'https://ibis-qa.droicelabs.us/api/practice/orders/?q=&limit=100', failOnStatusCode: false, headers:{ accept: "application/json" } }).then(response => { // 先校验接口返回状态码符合预期 expect(response.status).to.eq(200) const body = response.body cy.log(body) // count为数字类型时直接传数值,不要加引号 expect(body).has.property('count', 27) })
如果校验状态码时发现接口返回错误,可以通过打印响应体的message和detail字段定位请求失败的原因,常见原因包括缺失鉴权凭证、请求参数错误、账号无接口访问权限等,解决接口调用问题后即可拿到带count字段的正常响应。
内容的提问来源于stack exchange,提问作者Krupal Vaghasiya
相关产品推荐
相关产品推荐

