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ć?

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 .


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 .


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');
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.