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?

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 .


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


-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');
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.