如何使用Chai的Expect接口实现对象指定属性的匹配校验
单元测试对象部分匹配解决方案
Jest 环境(原生支持)
Jest 内置了对象部分匹配能力,使用expect.objectContaining即可实现,无需额外处理字段:
expect(result).toEqual(expect.objectContaining({ a: 'A', b: 123, c: ['x', 'y', 'z'] })) // 单独校验随机字段规则 expect(result.random).toHaveLength(10) expect(typeof result.random).toBe('string')
Chai 断言库环境
原生方法实现
直接使用deep.include可实现深度部分匹配,会忽略未声明的字段:
expect(result).to.deep.include({ a: 'A', b: 123, c: ['x', 'y', 'z'] }) expect(result.random).to.have.lengthOf(10)
复杂场景插件方案
如果有多层嵌套对象的部分匹配需求,可使用chai-subset插件:
// 先注册插件 const chai = require('chai') const chaiSubset = require('chai-subset') chai.use(chaiSubset) // 校验逻辑 expect(result).to.containSubset({ a: 'A', b: 123, c: ['x', 'y', 'z'] }) expect(result.random).to.have.lengthOf(10)
通用无依赖方案
不依赖断言库特性的轻量写法,直接逐个校验目标字段:
// 校验固定值字段 expect(result.a).to.eql('A') expect(result.b).to.eql(123) expect(result.c).to.eql(['x', 'y', 'z']) // 校验随机字段规则 expect(result.random).to.be.a('string').and.have.lengthOf(10)
内容的提问来源于stack exchange,提问作者Geraint Anderson
相关产品推荐
相关产品推荐

