Jest中toMatchObject匹配空对象的不符合预期行为咨询
关于Jest
toMatchObject 匹配行为的解析 你遇到的问题核心是对Jest中toMatchObject方法的匹配逻辑理解有误,它的设计是部分匹配,而非严格全等匹配:
- 当你用空对象
{}作为匹配条件时,toMatchObject会检查被测试对象是否包含空对象的所有属性——而空对象没有任何属性需要满足,所以任何对象(包括带a、b属性的testingObject)都会通过这个测试,这是符合该方法设计逻辑的。 - 第二个测试中,匹配对象包含
c:3,而testingObject没有这个属性,所以用.not.toMatchObject时测试通过,这也符合部分匹配的规则:被测试对象不包含匹配对象的所有属性,所以反向断言成立。
如果你想要验证被测试对象严格等于空对象(没有任何额外属性),应该使用严格匹配的断言方法:
it('Should fail when object has properties but expected empty object', () => { const testingObject = { a: 1, b: 2 }; expect(testingObject).toEqual({}); // 这个测试会失败,符合你的预期 });
也可以使用toStrictEqual,它会更严格地检查对象结构(比如原型链差异等),对于空对象的场景,效果和toEqual一致。
内容的提问来源于stack exchange,提问作者Mario Petrovic
相关产品推荐
相关产品推荐

