¿Hay alguna manera en jasmine.js para verificar si dos matrices son iguales, por ejemplo:
arr = [1, 2, 3]
expect(arr).toBe([1, 2, 3])
expect(arr).toEqual([1, 2, 3])
Ninguno de los dos parece funcionar.
¿Hay alguna manera en jasmine.js para verificar si dos matrices son iguales, por ejemplo:
arr = [1, 2, 3]
expect(arr).toBe([1, 2, 3])
expect(arr).toEqual([1, 2, 3])
Ninguno de los dos parece funcionar.
Respuestas:
Acabo de hacer la prueba y funciona con toEqual
por favor encuentre mi prueba:
describe('toEqual', function() {
it('passes if arrays are equal', function() {
var arr = [1, 2, 3];
expect(arr).toEqual([1, 2, 3]);
});
});
Solo para información:
toBe () versus toEqual (): toEqual () verifica la equivalencia. toBe (), por otro lado, se asegura de que sean exactamente el mismo objeto.
toBeCloseTo(expected,2)
pero no parece funcionar.
Puede comparar una matriz como la que se menciona a continuación si la matriz tiene algunos valores
it('should check if the array are equal', function() {
var mockArr = [1, 2, 3];
expect(mockArr ).toEqual([1, 2, 3]);
});
Pero si la matriz que se devuelve de alguna función tiene más de 1 elementos y todos son cero, verifique usando
expect(mockArray[0]).toBe(0);
solo para el registro que siempre puedes 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]));
Todo es metro de gusto, esto también funcionará para objetos literales complejos
Tuve un problema similar en el que se modificó una de las matrices. Lo estaba usando para $httpBackend
, y el objeto devuelto de ese era en realidad un $promise
objeto que contenía la matriz (no un Array
objeto).
Puede crear un emparejador de jazmín para que coincida con la matriz creando una toBeArray
función:
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);
}
});
});
Y luego simplemente úsalo en tus pruebas como los otros emparejadores de jazmín:
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]
ya que solo verifica los primeros x.length
elementos. Puede solucionar esto comprobando de if (x.length !== y.length) { return false; }
antemano.
for (var i; ...)
=> x[undefined]
, var arraysAreSame = function ... var arraysAreSame = true
:(
expect([1]).toBeArray([2])
. Y también cualquier otra matriz realmente, porqueundefined + 1 => NaN