la igualdad de la matriz de prueba chai no funciona como se esperaba

235

¿Por qué falla lo siguiente?

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

¿Y cuál es la forma correcta de probar eso?

kannix
fuente

Respuestas:

360

Para esperar , .equalcomparará objetos en lugar de sus datos, y en su caso son dos matrices diferentes.

Úselo .eqlpara comparar profundamente los valores. Mira este enlace .
O podría usar .deep.equalpara simular lo mismo que .eql.
O, en su caso, es posible que desee verificar .members .

Para afirmaciones que puede usar .deepEqual, enlace .

moka
fuente
2
FTR, la sintaxis de igualdad profunda ha cambiado a: .deepEqual()( chaijs.com/api/assert ).
Ludder
77
No se cambia, está viendo la funcionalidad de Afirmaciones , pero no Espera / Debería qué tema de inicio le preocupaba.
moka
55
Tienes razón, no leí bien. Pensé que es solo otro cambio de API.
Ludder
66
to.deep.equal(['a','b'])no parece funcionar Sin embargo lo to.have.all.members(['a','b'])hace. tan engorroso ...
jacob
chaijs.com/plugins/deep-equal-in-any-order funcionó bien cuando el orden de los atributos del objeto era impredecible.
asokan
60

Intenta usar Equal profundo. Comparará matrices anidadas y Json anidadas.

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

Consulte el sitio de documentación principal .

Conoce a mehta
fuente
77
Esto también funciona para matrices:expect([1, 5, 10].sort()).to.deep.equal([1, 10, 5])
alxndr
-1

Así es como se usa chai para probar profundamente las matrices asociativas.

Tuve un problema tratando de afirmar que dos asociativos matrices eran iguales. Sé que estos realmente no deberían usarse en JavaScript, pero estaba escribiendo pruebas unitarias alrededor del código heredado que devuelve una referencia a una matriz asociativa. :-)

Lo hice definiendo la variable como un objeto (no matriz) antes de mi llamada a la función:

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
fuente