[javascript] 배열을 비교하는 Jasmine.js

jasmine.js에 두 개의 배열이 같은지 확인하는 방법이 있습니까?

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

둘 다 작동하지 않는 것 같습니다.



답변

그냥 테스트를했고 그것은 작동합니다 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 ()는 그것들이 정확히 같은 객체인지 확인합니다.


답변

배열에 값이있는 경우 아래에 언급 된 것과 같은 배열을 비교할 수 있습니다

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

그러나 일부 함수에서 반환 된 배열에 둘 이상의 요소가 있고 모두 0이면 다음을 사용하여 확인하십시오.

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


답변

레코드를 위해 항상 JSON을 사용하여 비교할 수 있습니다.


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


답변