Existe uma maneira no jasmine.js de verificar se duas matrizes são iguais, por exemplo:
arr = [1, 2, 3]
expect(arr).toBe([1, 2, 3])
expect(arr).toEqual([1, 2, 3])
Nem parece funcionar.
Existe uma maneira no jasmine.js de verificar se duas matrizes são iguais, por exemplo:
arr = [1, 2, 3]
expect(arr).toBe([1, 2, 3])
expect(arr).toEqual([1, 2, 3])
Nem parece funcionar.
Respostas:
Acabei de fazer o teste e funciona com toEqual
por favor encontre o meu teste:
describe('toEqual', function() {
it('passes if arrays are equal', function() {
var arr = [1, 2, 3];
expect(arr).toEqual([1, 2, 3]);
});
});
Apenas para informação:
toBe () versus toEqual (): toEqual () verifica a equivalência. toBe (), por outro lado, garante que eles sejam exatamente o mesmo objeto.
toBeCloseTo(expected,2)
mas não parece funcionar.
Você pode comparar uma matriz como a mencionada abaixo, se a matriz tiver alguns valores
it('should check if the array are equal', function() {
var mockArr = [1, 2, 3];
expect(mockArr ).toEqual([1, 2, 3]);
});
Mas se a matriz retornada de alguma função tiver mais de 1 elementos e todos forem zero, verifique usando
expect(mockArray[0]).toBe(0);
apenas para o registro, você sempre pode comparar usando JSON.stringify
const arr = [1,2,3];
expect(JSON.stringify(arr)).toBe(JSON.stringify([1,2,3]));
expect(JSON.stringify(arr)).toEqual(JSON.stringify([1,2,3]));
É tudo medidor de gosto, isso também funcionará para objetos literais complexos
Eu tive um problema semelhante em que uma das matrizes foi modificada. Eu o estava usando $httpBackend
e o objeto retornado era na verdade um $promise
objeto contendo a matriz (não um objetoArray
objeto).
Você pode criar um combinador de jasmim para corresponder à matriz criando uma toBeArray
função:
beforeEach(function() {
'use strict';
this.addMatchers({
toBeArray: function(array) {
this.message = function() {
return "Expected " + angular.mock.dump(this.actual) + " to be array " + angular.mock.dump(array) + ".";
};
var arraysAreSame = function(x, y) {
var arraysAreSame = true;
for(var i; i < x.length; i++)
if(x[i] !== y[i])
arraysAreSame = false;
return arraysAreSame;
};
return arraysAreSame(this.actual, array);
}
});
});
E, em seguida, basta usá-lo em seus testes como os outros jogadores de jasmim:
it('should compare arrays properly', function() {
var array1, array2;
/* . . . */
expect(array1[0]).toBe(array2[0]);
expect(array1).toBeArray(array2);
});
x=[1,2]
, y=[1,2,3]
pois apenas verifica os primeiros x.length
elementos. Você pode corrigir isso verificando if (x.length !== y.length) { return false; }
antecipadamente.
for (var i; ...)
=> x[undefined]
,var arraysAreSame = function ... var arraysAreSame = true
:(
expect([1]).toBeArray([2])
. E também qualquer outra matriz realmente, porqueundefined + 1 => NaN