Можно ли сравнивать два объекта только между ключами / свойствами, которые они оба разделяют? - PullRequest
0 голосов
/ 19 декабря 2018

Итак, у меня есть два объекта

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 голосов
/ 19 декабря 2018

Почему бы не использовать .to.include.any.keys как

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

Не проверял, хотя

0 голосов
/ 19 декабря 2018

Вы пытаетесь сопоставить объекты в подмножестве общих ключей.Это можно сделать следующим образом.

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

Также посмотрите на этот ответ .

...