Esiste un modo in jasmine.js per verificare se due array sono uguali, ad esempio:
arr = [1, 2, 3]
expect(arr).toBe([1, 2, 3])
expect(arr).toEqual([1, 2, 3])
Nessuno dei due sembra funzionare.
Esiste un modo in jasmine.js per verificare se due array sono uguali, ad esempio:
arr = [1, 2, 3]
expect(arr).toBe([1, 2, 3])
expect(arr).toEqual([1, 2, 3])
Nessuno dei due sembra funzionare.
Risposte:
Ho appena fatto il test e funziona con toEqual
per favore trova il mio test:
describe('toEqual', function() {
it('passes if arrays are equal', function() {
var arr = [1, 2, 3];
expect(arr).toEqual([1, 2, 3]);
});
});
Solo per informazione:
toBe () versus toEqual (): toEqual () controlla l'equivalenza. toBe (), d'altra parte, si assicura che siano esattamente lo stesso oggetto.
toBeCloseTo(expected,2)
ma non sembra funzionare.
È possibile confrontare un array come quello indicato di seguito se l'array ha alcuni valori
it('should check if the array are equal', function() {
var mockArr = [1, 2, 3];
expect(mockArr ).toEqual([1, 2, 3]);
});
Ma se l'array che viene restituito da una funzione ha più di 1 elementi e tutti sono zero, verificare usando
expect(mockArray[0]).toBe(0);
solo per la cronaca puoi sempre confrontare utilizzando 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]));
È tutto metro di gusto, funzionerà anche per oggetti letterali complessi
Ho avuto un problema simile in cui uno degli array è stato modificato. Lo stavo usando per $httpBackend
, e l'oggetto restituito da quello era in realtà un $promise
oggetto contenente l'array (non unArray
oggetto).
È possibile creare un matcher jasmine per abbinare l'array creando una toBeArray
funzione:
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 poi usalo nei tuoi test come gli altri match di gelsomini:
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]
poiché controlla solo i primi x.length
elementi. È possibile risolvere questo problema controllando in if (x.length !== y.length) { return false; }
anticipo.
for (var i; ...)
=> x[undefined]
, var arraysAreSame = function ... var arraysAreSame = true
:(
expect([1]).toBeArray([2])
. E anche qualsiasi altro array davvero, perchéundefined + 1 => NaN