Есть ли способ в jasmine.js проверить, равны ли два массива, например:
arr = [1, 2, 3]
expect(arr).toBe([1, 2, 3])
expect(arr).toEqual([1, 2, 3])
Ни то, ни другое не работает.
Есть ли способ в jasmine.js проверить, равны ли два массива, например:
arr = [1, 2, 3]
expect(arr).toBe([1, 2, 3])
expect(arr).toEqual([1, 2, 3])
Ни то, ни другое не работает.
Ответы:
Только что сделал тест, и он работает с toEqual
пожалуйста, найдите мой тест:
describe('toEqual', function() {
it('passes if arrays are equal', function() {
var arr = [1, 2, 3];
expect(arr).toEqual([1, 2, 3]);
});
});
Просто для информации:
toBe () и toEqual (): toEqual () проверяет эквивалентность. toBe (), с другой стороны, гарантирует, что это точно такой же объект.
toBeCloseTo(expected,2)
но это не сработало.
Вы можете сравнить массив, как указано ниже, если массив имеет некоторые значения
it('should check if the array are equal', function() {
var mockArr = [1, 2, 3];
expect(mockArr ).toEqual([1, 2, 3]);
});
Но если массив, возвращаемый какой-либо функцией, содержит более 1 элемента, и все они равны нулю, то проверьте с помощью
expect(mockArray[0]).toBe(0);
просто для записи вы всегда можете сравнить, используя 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]));
Это все метра вкуса, это также будет работать для сложных буквальных объектов
У меня была похожая проблема, когда один из массивов был изменен. Я использовал его для $httpBackend
, и возвращенный объект из этого был на самом деле $promise
объект, содержащий массив (неArray
объект).
Вы можете создать совпадение с жасмином, чтобы соответствовать массиву, создав toBeArray
функцию:
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);
}
});
});
А затем просто используйте его в своих тестах, как и другие жасминовые сопоставители:
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]
поскольку она проверяет только первые x.length
элементы. Вы можете исправить это, проверив if (x.length !== y.length) { return false; }
заранее.
for (var i; ...)
=> x[undefined]
, var arraysAreSame = function ... var arraysAreSame = true
:(
expect([1]).toBeArray([2])
. А также любой другой массив действительно, потому чтоundefined + 1 => NaN