Gibt es in jasmine.js eine Möglichkeit zu überprüfen, ob zwei Arrays gleich sind, zum Beispiel:
arr = [1, 2, 3]
expect(arr).toBe([1, 2, 3])
expect(arr).toEqual([1, 2, 3])
Beides scheint nicht zu funktionieren.
Gibt es in jasmine.js eine Möglichkeit zu überprüfen, ob zwei Arrays gleich sind, zum Beispiel:
arr = [1, 2, 3]
expect(arr).toBe([1, 2, 3])
expect(arr).toEqual([1, 2, 3])
Beides scheint nicht zu funktionieren.
Antworten:
Habe gerade den Test gemacht und es funktioniert mit toEqual
Bitte finden Sie meinen Test:
describe('toEqual', function() {
it('passes if arrays are equal', function() {
var arr = [1, 2, 3];
expect(arr).toEqual([1, 2, 3]);
});
});
Nur zur Information:
toBe () versus toEqual (): toEqual () prüft die Äquivalenz. toBe () stellt andererseits sicher, dass es sich genau um dasselbe Objekt handelt.
toBeCloseTo(expected,2)
aber es scheint nicht zu funktionieren.
Sie können ein Array wie das unten erwähnte vergleichen, wenn das Array einige Werte hat
it('should check if the array are equal', function() {
var mockArr = [1, 2, 3];
expect(mockArr ).toEqual([1, 2, 3]);
});
Wenn das von einer Funktion zurückgegebene Array jedoch mehr als 1 Elemente enthält und alle Null sind, überprüfen Sie dies mithilfe von
expect(mockArray[0]).toBe(0);
Nur für den Datensatz können Sie immer mit JSON.stringify vergleichen
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]));
Es ist alles Meter Geschmack, dies funktioniert auch für komplexe wörtliche Objekte
Ich hatte ein ähnliches Problem, bei dem eines der Arrays geändert wurde. Ich habe es für verwendet $httpBackend
, und das zurückgegebene Objekt davon war tatsächlich ein $promise
Objekt, das das Array enthielt (keinArray
Objekt).
Sie können einen Jasmin-Matcher erstellen, der dem Array entspricht, indem Sie eine toBeArray
Funktion erstellen :
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);
}
});
});
Und dann verwenden Sie es einfach in Ihren Tests wie die anderen Jasmin-Matcher:
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]
da nur die ersten x.length
Elemente überprüft werden. Sie können dies beheben, indem Sie dies if (x.length !== y.length) { return false; }
vorher überprüfen .
for (var i; ...)
=> x[undefined]
, var arraysAreSame = function ... var arraysAreSame = true
:(
expect([1]).toBeArray([2])
. Und auch wirklich jedes andere Array, weilundefined + 1 => NaN