Gibt es eine Möglichkeit in jasmine.js zu überprüfen, ob zwei Arrays gleich sind, zum Beispiel:Jasmine.js Vergleich Arrays
arr = [1, 2, 3]
expect(arr).toBe([1, 2, 3])
expect(arr).toEqual([1, 2, 3])
Weder scheint zu funktionieren.
Gibt es eine Möglichkeit in jasmine.js zu überprüfen, ob zwei Arrays gleich sind, zum Beispiel:Jasmine.js Vergleich Arrays
arr = [1, 2, 3]
expect(arr).toBe([1, 2, 3])
expect(arr).toEqual([1, 2, 3])
Weder scheint zu funktionieren.
tat einfach den Test und es funktioniert mit toEqual
bitte meinen Test finden:
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() checks equivalence. toBe(), on the other hand, makes sure that they're the exact same object.
ich hatte ähnlich Ein Problem, bei dem eines der Arrays geändert wurde. Ich benutzte es für $httpBackend
, und das zurückgegebene Objekt von diesem war tatsächlich ein $promise
Objekt, das das Array (kein Array
Objekt) enthält.
Sie können einen Jasmin-Matcher erstellen, indem Sie eine toBeArray
Funktion des Arrays entsprechen:
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 einfach in Ihren Tests verwenden wie die anderen Jasmin-Matcher:
it('should compare arrays properly', function() {
var array1, array2;
/* . . . */
expect(array1[0]).toBe(array2[0]);
expect(array1).toBeArray(array2);
});
Ich bekomme TypeError: this.addMatchers ist keine Funktion – AndyTheEntity
Die "arraysAreSame" -Funktion, die Sie angegeben haben, wird ein falsches positives Ergebnis für die Arrays geben x = [1,2] ',' y = [1,2,3 ] 'da es nur die ersten' x.length' Elemente überprüft. Sie können dies beheben, indem Sie 'if (x.length! == y.length) {return false; } 'vorher. – warchinal
@AndyTheEntity "Die Funktion addMatchers ist nicht mehr auf der Spezifikation (dies) es ist jetzt auf dem globalen Jasmin-Objekt." - siehe [Jasmine docs] (http://jasmine.github.io/2.0/upgrading.html) – rwisch45
Hm, danke Es scheint, dass das Problem darin besteht, dass das Array, mit dem ich vergleiche, modifiziert wird, also macht es etwas wie arr = [1, 2, 3] arr ['pop'] = function() {...} expect (arr) .toEquals ([1, 2, 3]) – user2032804
Wie kann man testen, ob die Werte innerhalb von Epsilon gleich sind? Beispiel: Mein Test ist fehlgeschlagen. Erwartet [-9, -6, 6, 3, 1.0000000000000004, 2] entspricht [-9, -6, 6, 3, 1, 2]. – morpheus
@morpheus - Ich habe versucht 'BeBeCloseTo (erwartet, 2) 'aber es scheint nicht zu funktionieren. – cod3monk3y