如何使用Cypress校验对象数组中属性值是否等于指定值?
错误原因
你混用了两种不同的断言体系:
expect()是Chai断言库的原生方法,仅支持to.equal、to.eql这类Chai自带的断言链语法,没有.should属性,因此调用后会抛出无效属性报错。.should()是Cypress为自身链式命令(如cy.get()、cy.request()等)封装的专属断言调用方法,不能接在Chai的expect()方法后使用。- 额外注意:你示例中接口返回的
value是字符串类型,expectedValue是数字类型,若使用严格相等断言,需要先统一两者类型,否则即使数值一致也会断言失败。
正确校验写法
写法1:在then回调中使用Chai原生断言
直接替换断言语法即可:
it('some test' , () => { const expectedValue = '200'; // 与返回的value类型保持一致,均为字符串 cy.apiGetObject(id).then((arr_obj) => { // Chai原生断言语法,不要使用.should expect(arr_obj[0].value).to.equal(expectedValue); }) })
如果需要忽略类型仅校验值相等,可以使用.to.eql:
expect(arr_obj[0].value).to.eql(expectedValue); // 字符串'200'和数字200会判定为相等
写法2:使用Cypress链式断言(更简洁)
利用Cypress自带的its()命令直接提取嵌套属性,直接接.should()做断言,不需要额外写then回调:
it('some test' , () => { const expectedValue = '200'; cy.apiGetObject(id) .its('0.value') // 直接提取数组第0项的value属性 .should('eq', expectedValue); })
内容的提问来源于stack exchange,提问作者stackuser
相关产品推荐
相关产品推荐

