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 $promise
objet contenant le tableau (pas un Array
objet).
Vous pouvez créer un matcher de jasmin pour correspondre au tableau en créant une toBeArray
fonction:
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