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?

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 .


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


-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');
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.