2013-07-09 4 views
11

Chai есть хороший способ, чтобы утверждать, если массив включает в себя определенный элементмокко, Chai: утверждающие, что объект включен в массиве объектов

expect([1,2,3]).to.include(2); 

То, что я хотел бы что-то подобное, учитывая массив Объекты:

expect([{a:1},{b:2}]).to.include({b:2}); 

Возможно ли это?

+0

Вы попробовали? Документация, похоже, подразумевает, что она будет работать. http://chaijs.com/api/bdd/#include – Schleis

+0

Да, я попробовал - эти примеры показывают, как проверить, существует ли определенный ключ, а не фактическое значение (или весь объект в этом отношении) – mck

ответ

18

Посмотрите на Chai Things plugin, что делает то, что вы хотите:

[{a:1},{b:2}].should.include.something.that.deep.equals({b:2}) 
+0

именно то, что я был ищет: +1: спасибо! – mck

+0

, и если у вас есть чек [{a: 1}, {a: 2}]. Содержит (['a']), как бы вы это сделали – PirateApp

7

Вот альтернативный и не зависит от подхода порядка для коллекций:

массив

expect([1, 2, 3]).to.include.members([3, 2, 1]) 

Вы можете также используйте это с флагом deep для сравнения объектов:

массив объектов

expect([{ id: 1 }]).to.deep.include.members([{ id: 1 }]); 

объекта

expect({foo: 'bar', width: 190, height: 90}).to.include({ height: 90, width: 190 }) 
0

Вы можете использовать глубокий метод для массива объектов.

ожидать ([{a: 1}, {b: 2}]). To.deep.include ({b: 2}); // Он будет проходить

Вы можете найти больше примеров использования метод глубокого Here

Главное, что нужно помнить здесь о ссылочных типов.