równość tablicy testowej chai nie działa zgodnie z oczekiwaniami

235

Dlaczego poniższe błędy nie działają?

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

i jaki jest właściwy sposób, aby to sprawdzić?

kannix
źródło

Odpowiedzi:

360

Dla spodziewać , .equalbędzie porównanie obiektów zamiast ich danych, aw twoim przypadku to dwie różne tablice.

Użyj .eql, aby głęboko porównać wartości. Sprawdź ten link .
Lub możesz użyć .deep.equaldo symulacji tego samego jak .eql.
Lub w twoim przypadku możesz chcieć to sprawdzić .members .

W przypadku stwierdzeń, których możesz użyć .deepEqual, link .

Moka
źródło
2
FTR, składnia głębokiej równości zmieniła się na: .deepEqual()( chaijs.com/api/assert ).
Ludder,
7
To się nie zmienia, patrzysz na funkcjonalność Aserts , ale nie oczekujesz / Powinno się zastanawiać, który temat był zaniepokojony.
moka
5
Masz rację, nie czytałem dobrze. Myślałem, że to tylko kolejna zmiana interfejsu API.
Ludder,
6
to.deep.equal(['a','b'])wydaje się nie działać. jednak to.have.all.members(['a','b'])robi. tak kłopotliwe…
jacob
chaijs.com/plugins/deep-equal-in-any-order działał dobrze, gdy kolejność atrybutów obiektu była nieprzewidywalna.
asokan
60

Spróbuj użyć głębokiego Equal. Porówna zagnieżdżone tablice, a także zagnieżdżone Json.

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

Proszę odnieść się do głównej strony dokumentacji .

Poznaj Mehta
źródło
7
Działa to również w przypadku tablic:expect([1, 5, 10].sort()).to.deep.equal([1, 10, 5])
alxndr
-1

Oto jak używać chai do głębokiego testowania tablic asocjacyjnych.

Miałem problem próbuje twierdzić, że dwie asocjacyjne tablice były równe. Wiem, że tak naprawdę nie należy ich używać w javascript, ale pisałem testy jednostkowe wokół starszego kodu, który zwraca odwołanie do tablicy asocjacyjnej. :-)

Zrobiłem to, definiując zmienną jako obiekt (nie tablicę) przed wywołaniem funkcji:

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
źródło