рівність тестового масиву chai працює не так, як очікувалося


235

Чому таке не вдається?

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

і який правильний спосіб перевірити це?

Відповіді:


360

Для очікувати , .equalбуде порівнювати об'єкти , а не їх даних, а у вашому випадку це два різних масивів.

Використовуйте .eqlдля глибокого порівняння значень. Перевірте це посилання .
Або ви можете використовувати .deep.equalдля того, щоб імітувати те саме, що і .eql.
Або у вашому випадку ви можете перевірити .members .

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


2
FTR, синтаксис глибокого рівного змінено на: .deepEqual()( chaijs.com/api/assert ).
Людер

7
Це не змінюється, ви дивитесь на функціональність Asserts , але не очікуйте / чи повинен ставити тему, який стосувався початківця теми.
moka

5
Ти маєш рацію, я не добре читав. Я думав, що це лише чергова зміна API.
Людер

6
to.deep.equal(['a','b'])не здається, працює. проте to.have.all.members(['a','b'])робить. так громіздкий…
jacob

chaijs.com/plugins/deep-equal-in-any-order добре працював, коли порядок атрибутів об’єкта був непередбачуваним.
asokan

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');
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.