Answers:
刚刚进行了测试,它可以与 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)
但是似乎没有用。
如果数组具有某些值,则可以像下面提到的那样比较数组
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);
仅出于记录目的,您始终可以使用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]));
都是米的味道,这也适用于复杂的文字对象
我有一个类似的问题,其中一个数组被修改。我将其用于$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