首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Jasmine.js比较数组

Jasmine.js比较数组
EN

Stack Overflow用户
提问于 2013-03-30 19:10:08
回答 3查看 112.9K关注 0票数 219

在jasmine.js中有没有一种方法来检查两个数组是否相等,例如:

代码语言:javascript
复制
arr = [1, 2, 3]
expect(arr).toBe([1, 2, 3])
expect(arr).toEqual([1, 2, 3])

两种方法似乎都不管用。

EN

回答 3

Stack Overflow用户

发布于 2019-08-01 12:30:15

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

代码语言:javascript
复制
it('should check if the array are equal', function() {
        var mockArr = [1, 2, 3];
        expect(mockArr ).toEqual([1, 2, 3]);
 });

但是,如果从某个函数返回的数组包含1个以上的元素,并且所有元素都为零,则使用

代码语言:javascript
复制
expect(mockArray[0]).toBe(0);
票数 1
EN

Stack Overflow用户

发布于 2018-10-25 17:25:28

为了便于记录,您可以随时使用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]));

这是所有的品味,这也适用于复杂的文字对象

票数 -2
EN

Stack Overflow用户

发布于 2014-10-22 16:20:55

我也遇到过类似的问题,其中一个数组被修改了。我将它用于$httpBackend,从中返回的对象实际上是一个包含数组的$promise对象(而不是Array对象)。

您可以通过创建一个toBeArray函数来创建一个jasmine匹配器来匹配数组:

代码语言:javascript
复制
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);
    }
  });
});

然后像其他的茉莉花匹配器一样在你的测试中使用它:

代码语言:javascript
复制
it('should compare arrays properly', function() {
  var array1, array2;
  /* . . . */
  expect(array1[0]).toBe(array2[0]);
  expect(array1).toBeArray(array2);
});
票数 -4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15717844

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档