Жасмин: Тест, если массив содержит элемент объекта с определенным свойством без пользовательского сопоставления - PullRequest
0 голосов
/ 05 марта 2019

У меня есть массив:

const dummyArr = [
    { name: "a", city: "c1" },
    { name: "b", city: "c2" },
    { name: "z", city: "c3" }
]

Мне нужно написать тест Жасмин, чтобы проверить, существует ли элемент в массиве со свойством name: b.
Не уверен, что смогу использовать arrayContaining или objectContaining здесь.

Примечание: мне нужно проверить это в toHaveBeenCalledWith

expect(obj.setArray).toHaveBeenCalledWith("personalDetails", .......)

1 Ответ

0 голосов
/ 30 мая 2019

Вот еще один способ сделать это без специального сопоставителя.Я предполагаю, что dummyArr - ваши фальшивые данные, и вы хотите проверить, что setArray вызывается со вторым элементом (с именем 'b').

expect(obj.setArray).toHaveBeenCalledWith(
  jasmine.arrayContaining([dummyArr.find(el => e.name === 'b')])
);

В зависимости от того, что вы считаете читаемым, вы можете сделатьпоиск перед ожиданием:

const dummyEl = dummyArr.find(el => e.name === 'b');
expect(obj.setArray).toHaveBeenCalledWith(jasmine.arrayContaining([dummyEl]));

Обратите внимание, что это происходит, когда setArray вызывается с любым массивом, содержащим этот элемент, например, с целым dummyArr.Если вы хотите точное совпадение, используйте jasmine.arrayWithExactContents().

...