Existe-t-il un moyen dans jasmine.js de vérifier si deux tableaux sont égaux, par exemple:
arr = [1, 2, 3]
expect(arr).toBe([1, 2, 3])
expect(arr).toEqual([1, 2, 3])
Aucun ne semble fonctionner.
Existe-t-il un moyen dans jasmine.js de vérifier si deux tableaux sont égaux, par exemple:
arr = [1, 2, 3]
expect(arr).toBe([1, 2, 3])
expect(arr).toEqual([1, 2, 3])
Aucun ne semble fonctionner.
Réponses:
Je viens de faire le test et ça marche avec toEqual
veuillez trouver mon test:
describe('toEqual', function() {
it('passes if arrays are equal', function() {
var arr = [1, 2, 3];
expect(arr).toEqual([1, 2, 3]);
});
});
Juste pour informations:
toBe () versus toEqual (): toEqual () vérifie l'équivalence. toBe (), d'autre part, s'assure qu'ils sont exactement le même objet.
toBeCloseTo(expected,2)mais cela ne semble pas fonctionner.
Vous pouvez comparer un tableau comme celui mentionné ci-dessous si le tableau a des valeurs
it('should check if the array are equal', function() {
var mockArr = [1, 2, 3];
expect(mockArr ).toEqual([1, 2, 3]);
});
Mais si le tableau renvoyé par une fonction a plus de 1 éléments et que tous sont nuls, vérifiez en utilisant
expect(mockArray[0]).toBe(0);
juste pour l'enregistrement, vous pouvez toujours comparer en utilisant 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]));
C'est tout mètre de goût, cela fonctionnera également pour les objets littéraux complexes
J'ai eu un problème similaire où l'un des tableaux a été modifié. Je l'utilisais pour $httpBackend, et l'objet renvoyé de celui-ci était en fait un $promiseobjet contenant le tableau (pas un Arrayobjet).
Vous pouvez créer un matcher de jasmin pour correspondre au tableau en créant une toBeArrayfonction:
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);
}
});
});
Et puis il suffit de l'utiliser dans vos tests comme les autres matchers au jasmin:
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]car elle ne vérifie que les premiers x.lengthéléments. Vous pouvez résoudre ce problème en vérifiant if (x.length !== y.length) { return false; }au préalable.
for (var i; ...)=> x[undefined], var arraysAreSame = function ... var arraysAreSame = true:(
expect([1]).toBeArray([2]). Et aussi tout autre tableau vraiment, carundefined + 1 => NaN