l'uguaglianza dell'array chai test non funziona come previsto


235

Perché non riesce?

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

e qual è il modo giusto per testarlo?

Risposte:


360

Per aspettarsi , .equalconfronterà gli oggetti anziché i loro dati, e nel tuo caso si tratta di due matrici diverse.

Utilizzare .eqlper confrontare profondamente i valori. Dai un'occhiata a questo link .
Oppure potresti usare .deep.equalper simulare lo stesso di .eql.
O nel tuo caso potresti voler controllare .members .

Per affermazioni che puoi usare .deepEqual, link .


2
FTR, la sintassi deep equal è stata modificata in: .deepEqual()( chaijs.com/api/assert ).
Ludder,

7
Non è cambiato, stai osservando la funzionalità Assert , ma non Aspetti / Dovresti temere di iniziare l'argomento.
moka,

5
Hai ragione, non ho letto bene. Ho pensato che fosse solo un'altra modifica dell'API.
Ludder,

6
to.deep.equal(['a','b'])non sembra funzionare. tuttavia lo to.have.all.members(['a','b'])fa. così ingombrante ...
Jacob

chaijs.com/plugins/deep-equal-in-any-order ha funzionato bene quando l'ordine degli attributi dell'oggetto era imprevedibile.
asokan,

60

Prova a usare deep Equal. Confronterà le matrici nidificate e la Json nidificata.

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

Fare riferimento al sito di documentazione principale .


7
Questo funziona anche per gli array:expect([1, 5, 10].sort()).to.deep.equal([1, 10, 5])
alxndr

-1

Ecco come usare il chai per testare in modo approfondito le matrici associative.

Ho avuto un problema cercando di affermare che due array associativi erano uguali. So che questi non dovrebbero davvero essere usati in JavaScript ma stavo scrivendo unit test attorno al codice legacy che restituisce un riferimento a un array associativo. :-)

L'ho fatto definendo la variabile come oggetto (non array) prima della mia chiamata di funzione:

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');
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.