Сравнение массивов Jasmine.js

Есть ли способ в jasmine.js проверить, равны ли два массива, например:

arr = [1, 2, 3]
expect(arr).toBe([1, 2, 3])
expect(arr).toEqual([1, 2, 3])

Ничего не работает.

Ответ 1

Просто прошел тест, и он работает с toEqual

пожалуйста, найдите мой тест:

http://jsfiddle.net/7q9N7/3/

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

Ответ 2

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