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

1

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

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')

Я только хочу сравнить значения в ключах, которые они оба разделяют. Можно ли сделать что-то подобное программно?

Теги:
chai

2 ответа

2
Лучший ответ

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

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

Также взгляните на этот ответ.

  • 0
    Удивительно, спасибо!
1

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

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

Хотя не проверял

  • 0
    О, я должен прочитать документацию чай, я не знал, что вы могли бы сделать это: /

Ещё вопросы

Сообщество Overcoder
Наверх
Меню