равенство массива теста Чай не работает, как ожидалось

235

Почему следующее не удается?

expect([0,0]).to.equal([0,0]);

и как правильно это проверить?

kannix
источник

Ответы:

360

Для ожидать , .equalбудет сравнивать объекты , а не их данных, а в вашем случае это два разных массивов.

Используйте .eqlдля того, чтобы глубоко сравнить значения. Проверьте эту ссылку .
Или вы можете использовать .deep.equalдля того, чтобы имитировать так же, как .eql.
Или в вашем случае вы можете проверить .members .

Для утверждает , вы можете использовать .deepEqual, ссылку .

мокко
источник
2
FTR, синтаксис с глубоким равенством изменился на: .deepEqual()( chaijs.com/api/assert ).
Ludder
7
Это не изменилось, вы смотрите на функциональность Asserts , но не ожидаете / должны, какой начальник темы был обеспокоен.
Мока
5
Вы правы, я плохо читал. Я думал, что это просто еще одно изменение API.
Ludder
6
to.deep.equal(['a','b'])не похоже на работу. однако to.have.all.members(['a','b'])делает. так громоздко…
Джейкоб
chaijs.com/plugins/deep-equal-in-any-order работал хорошо, когда порядок атрибутов объектов был непредсказуемым.
Асокан
60

Попробуйте использовать глубокий Равный. Он будет сравнивать как вложенные массивы, так и вложенные Json.

expect({ foo: 'bar' }).to.deep.equal({ foo: 'bar' });

Пожалуйста, обратитесь к основной документации сайта .

Познакомьтесь с Мехтой
источник
7
Это также работает для массивов:expect([1, 5, 10].sort()).to.deep.equal([1, 10, 5])
alxndr
-1

Это как использовать Chai для глубокого тестирования ассоциативных массивов.

У меня была проблема, пытающаяся утверждать, что два ассоциативных массива были равны. Я знаю, что их не следует использовать в javascript, но я писал модульные тесты на основе унаследованного кода, который возвращает ссылку на ассоциативный массив. :-)

Я сделал это, определив переменную как объект (не массив) до вызова моей функции:

var myAssocArray = {};   // not []
var expectedAssocArray = {};  // not []

expectedAssocArray['myKey'] = 'something';
expectedAssocArray['differentKey'] = 'something else';

// legacy function which returns associate array reference
myFunction(myAssocArray);

assert.deepEqual(myAssocArray, expectedAssocArray,'compare two associative arrays');
GreensterRox
источник