Jasmine.js比较数组

时间:2013-03-30 11:10:08

标签: javascript jasmine

jasmine.js中是否有办法检查两个数组是否相等,例如:

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

似乎都没有效果。

4 个答案:

答案 0 :(得分:312)

刚刚进行了测试,它适用于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(),关于   另一方面,确保它们是完全相同的对象。

答案 1 :(得分:0)

如果数组具有某些值,则可以像下面提到的那样比较数组

it('should check if the array are equal', function() {
        var mockArr = [1, 2, 3];
        expect(mockArr ).toEqual([1, 2, 3]);
 });

但是,如果从某个函数返回的数组具有多个元素,并且所有元素均为零,则使用进行验证

expect(mockArray[0]).toBe(0);

答案 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);
});

答案 3 :(得分:-3)

仅出于记录目的,您始终可以使用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]));

这都是米的味道, 这也适用于复杂的文字对象