Есть ли способ в 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(), на с другой стороны, убедитесь, что они являются одним и тем же объектом.
У меня была аналогичная проблема, когда один из массивов был изменен. Я использовал его для $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);
});