Если вы используете Jest и вам нужно убедиться, что Array
содержит Object
, который соответствует заданной структуре, .toContain()
вам не поможет. Значит, нужен другой подход.
Рассмотрим следующий сценарий. У вас есть массив объектов:
const state = [ { type: 'START', data: 'foo' }, { type: 'START', data: 'baz' }, { type: 'END', data: 'foo' }, ]
… И вы хотите проверить, что он содержит такой элемент { type: 'END' }
.
Вы можете написать следующий тест:
expect(state).toEqual( // 1 expect.arrayContaining([ // 2 expect.objectContaining({ // 3 type: 'END' // 4 }) ]) )
Вышеупомянутое читается как:
- вы ожидаете, что ваш массив равен
- массив, содержащий
- Объект, содержащий
- следующие свойства
ПРИМЕЧАНИЕ. expect.arrayContaining()
необходимо передать Array[]
, даже если вы передаете один элемент.
Добавление его как настраиваемого сопоставителя
Как предложил Мартин Хохель, если вы часто используете это, вы можете создать настраиваемый сопоставитель, чтобы избежать многословной реализации: