jasmine.js에 두 개의 배열이 같은지 확인하는 방법이 있습니까?
arr = [1, 2, 3]
expect(arr).toBe([1, 2, 3])
expect(arr).toEqual([1, 2, 3])
둘 다 작동하지 않는 것 같습니다.
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 ()는 그것들이 정확히 같은 객체인지 확인합니다.
toBeCloseTo(expected,2)
했지만 작동하지 않는 것 같습니다.
레코드를 위해 항상 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);
});
x=[1,2]
, y=[1,2,3]
그 첫 번째 검사 이후 x.length
요소를. if (x.length !== y.length) { return false; }
미리 확인하여이 문제를 해결할 수 있습니다 .
for (var i; ...)
=> x[undefined]
, var arraysAreSame = function ... var arraysAreSame = true
:(
expect([1]).toBeArray([2])
. 또한 다른 배열도 있습니다.undefined + 1 => NaN