A igualdade da matriz de teste chai não funciona conforme o esperado

235

Por que o seguinte falha?

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

e qual é o caminho certo para testar isso?

kannix
fonte

Respostas:

360

Por esperar , .equalcomparará os objetos em vez dos dados e, no seu caso, são duas matrizes diferentes.

Use .eqlpara comparar valores profundamente. Confira este link .
Ou você pode usar .deep.equalpara simular o mesmo que .eql.
Ou no seu caso, você pode querer verificar .members .

Para afirmações que você pode usar .deepEqual, link .

moka
fonte
2
FTR, a sintaxe profundamente igual foi alterada para: .deepEqual()( chaijs.com/api/assert ).
Ludder
7
Ele não foi alterado, você está olhando para a funcionalidade Asserts , mas não Expect / Should, sobre o qual o iniciador de tópicos estava preocupado.
moka
5
Você está certo, eu não li bem. Eu pensei que era apenas mais uma alteração na API.
Ludder
6
to.deep.equal(['a','b'])parece não funcionar. no entanto to.have.all.members(['a','b'])faz. tão complicado ...
jacob
chaijs.com/plugins/deep-equal-in-any-order funcionou bem quando a ordem dos atributos do objeto era imprevisível.
asokan
60

Tente usar o Igual profundo. Ele comparará matrizes aninhadas e Json aninhado.

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

Por favor, consulte o site principal da documentação .

Conheça Mehta
fonte
7
Isso também funciona para matrizes:expect([1, 5, 10].sort()).to.deep.equal([1, 10, 5])
alxndr 4/16
-1

É assim que se usa o chai para testar profundamente matrizes associativas.

Tive um problema ao tentar afirmar que duas matrizes associativas eram iguais. Eu sei que eles realmente não devem ser usados ​​em javascript, mas eu estava escrevendo testes de unidade em torno do código legado que retorna uma referência a uma matriz associativa. :-)

Eu fiz isso definindo a variável como um objeto (não array) antes da minha chamada de função:

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
fonte