如何使用Supertest检查数组是否包含指定的预期值?
场景1:要求数组元素、顺序、长度完全匹配预期
直接用深度相等断言即可:
const expectedArray = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'] // 校验类型+完全匹配 array.should.be.an.Array().and.deep.equal(expectedArray)
这种写法校验逻辑最严格,只要元素、顺序、长度有任意一项不符合就会断言失败,适合接口返回固定顺序数组的场景。
场景2:不要求元素顺序,仅要求数组包含所有预期值
如果允许数组元素乱序,只要求所有预期值都存在:
const expectedValues = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'] // 校验类型+包含所有预期值(允许存在额外值、顺序任意) array.should.be.an.Array().and.include.members(expectedValues)
如果要再加限制:不允许存在额外值,只允许顺序不同,补充长度校验即可:
const expectedValues = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'] array.should.be.an.Array() .with.lengthOf(expectedValues.length) .and.include.members(expectedValues)
错误原因说明
你之前的写法失效是因为have.properties是用于校验对象的键名,而数组的键是数字索引,不是元素本身,自然无法匹配到你传入的字符串元素值。
内容的提问来源于stack exchange,提问作者dokichan
相关产品推荐
相关产品推荐

