在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])
这两种方法似乎都不奏效。
当前回答
我有一个类似的问题,其中一个数组被修改。我使用它$httpBackend,返回的对象实际上是一个$promise对象包含数组(不是数组对象)。
你可以通过创建toBeArray函数来创建一个jasmine匹配器来匹配数组:
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);
});
其他回答
如果数组有一些值,您可以比较如下所述的数组
it('should check if the array are equal', function() {
var mockArr = [1, 2, 3];
expect(mockArr ).toEqual([1, 2, 3]);
});
但如果某个函数返回的数组有1个以上的元素,并且都是0,则使用
expect(mockArray[0]).toBe(0);
我有一个类似的问题,其中一个数组被修改。我使用它$httpBackend,返回的对象实际上是一个$promise对象包含数组(不是数组对象)。
你可以通过创建toBeArray函数来创建一个jasmine匹配器来匹配数组:
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);
});
只是为了记录,你可以使用JSON.stringify进行比较
const arr = [1,2,3]; stringify (arr) expect (JSON)。(JSON stringify (raymond gatto [1,2,3])); stringify (arr) expect (JSON)。toEqual (JSON stringify ([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() vs . toEqual(): toEqual()检查是否相等。toBe(),在 另一方面,确保它们是完全相同的对象。