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 ()는 그것들이 정확히 같은 객체인지 확인합니다.
답변
배열에 값이있는 경우 아래에 언급 된 것과 같은 배열을 비교할 수 있습니다
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);
});