使用should.js的have.property校验对象键值对断言失败如何解决?
问题原因
- 拼写笔误:你提供的测试代码存在两处拼写错误:
- 元素获取方法错写为
cy.gey,正确应为cy.get - 校验的属性名错写为
Compasny Feature:,与实际对象的键Company Feature:拼写不符(代码里字母n和s顺序错误,多了冗余字母s)
- 元素获取方法错写为
- 引用类型严格比较规则:should.js的
have.property断言默认对引用类型(数组、对象)执行严格相等(===)校验,你代码里字面量声明的['open space ']和对象返回的对应数组是两个不同的内存实例,哪怕内容完全一致,严格相等判断也会返回false,这就是报错显示预期值和实际值看起来完全一致但断言失败的核心原因,不属于should.js的bug。
解决方法
改用支持深度比较的断言即可,推荐两种写法:
- 先通过
its取对应属性,再用deep.equal做深度值比较:
cy.get(selector).its('Company Feature: ').should('deep.equal', ['open space '])
- 用should回调手动执行深度断言:
cy.get(selector).should(targetObj => { expect(targetObj).to.have.property('Company Feature: ').that.deep.equals(['open space ']) })
内容的提问来源于stack exchange,提问作者jacobcan118
相关产品推荐
相关产品推荐

