Czy w jasmine.js istnieje sposób sprawdzenia, czy dwie tablice są równe, na przykład:
arr = [1, 2, 3]
expect(arr).toBe([1, 2, 3])
expect(arr).toEqual([1, 2, 3])
Żadne z nich nie działa.
Czy w jasmine.js istnieje sposób sprawdzenia, czy dwie tablice są równe, na przykład:
arr = [1, 2, 3]
expect(arr).toBe([1, 2, 3])
expect(arr).toEqual([1, 2, 3])
Żadne z nich nie działa.
Odpowiedzi:
Właśnie wykonałem test i działa z toEqual
proszę znaleźć mój test:
describe('toEqual', function() {
it('passes if arrays are equal', function() {
var arr = [1, 2, 3];
expect(arr).toEqual([1, 2, 3]);
});
});
Tylko dla informacji:
toBe () versus toEqual (): toEqual () sprawdza równoważność. Z drugiej strony toBe () upewnia się, że są dokładnie tym samym obiektem.
toBeCloseTo(expected,2)
ale wydaje się, że nie działa.
Możesz porównać tablicę jak poniżej, jeśli tablica ma jakieś wartości
it('should check if the array are equal', function() {
var mockArr = [1, 2, 3];
expect(mockArr ).toEqual([1, 2, 3]);
});
Ale jeśli tablica zwrócona przez jakąś funkcję ma więcej niż 1 element, a wszystkie są zerowe, to sprawdź za pomocą
expect(mockArray[0]).toBe(0);
tylko dla rekordu, zawsze możesz porównać używając 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]));
To wszystko metr smaku, będzie to również działać w przypadku złożonych obiektów dosłownych
Miałem podobny problem, gdy jedna z tablic została zmodyfikowana. Używałem go $httpBackend
, a zwrócony z niego obiekt był w rzeczywistości $promise
obiektem zawierającym tablicę (a nie Array
obiektem).
Możesz utworzyć dopasowujący jaśmin pasujący do tablicy, tworząc toBeArray
funkcję:
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);
}
});
});
A potem po prostu użyj go w swoich testach, tak jak innych dopasowujących jaśmin:
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]
ponieważ sprawdza tylko pierwsze x.length
elementy. Możesz to naprawić, sprawdzając if (x.length !== y.length) { return false; }
wcześniej.
for (var i; ...)
=> x[undefined]
, var arraysAreSame = function ... var arraysAreSame = true
:(
expect([1]).toBeArray([2])
. A także każda inna tablica naprawdę, ponieważundefined + 1 => NaN