是否可以仅在它们共享的键/属性之间比较两个对象?

时间:2018-12-19 08:29:48

标签: javascript json chai

所以我有两个对象

address: {
  id: 1234,
  city: "foo",
  country: "bar",
  name: "baz"
}

defaultAddress: { 
  id: 1234,
  city: "foo",
  country: "bar",
  firstName: "ba",
  lastName: "z"
}

如果我尝试在它们之间做一个直接的比较/断言,即

expect(address).to.contain(defaultAddress)

(或者相反),将失败,因为每个字段都包含彼此不包含的字段

  

(AssertionError:期望{address}具有属性“ firstName”)

我只想比较它们都共享的键中的值。可以通过编程方式做类似的事情吗?

2 个答案:

答案 0 :(得分:2)

您正在尝试匹配共享密钥子集中的对象。可以按照以下步骤进行。

for(const key in address) {
  if(typeof defaultAddress[key] !== 'undefined') {
    expect(address[key]).to.equal(defaultAddress[key])
  }
}

也可以看看这个answer

答案 1 :(得分:1)

为什么不使用.to.include.any.keys作为

expect(defaultAddress).to.include.any.keys(...Object.keys(address));

虽然没有测试