Có cách nào trong jasmine.js để kiểm tra xem hai mảng có bằng nhau không, ví dụ:
arr = [1, 2, 3]
expect(arr).toBe([1, 2, 3])
expect(arr).toEqual([1, 2, 3])
Cả hai dường như không làm việc.
Có cách nào trong jasmine.js để kiểm tra xem hai mảng có bằng nhau không, ví dụ:
arr = [1, 2, 3]
expect(arr).toBe([1, 2, 3])
expect(arr).toEqual([1, 2, 3])
Cả hai dường như không làm việc.
Câu trả lời:
Chỉ cần làm bài kiểm tra và nó hoạt động với toEqual
vui lòng tìm bài kiểm tra của tôi:
describe('toEqual', function() {
it('passes if arrays are equal', function() {
var arr = [1, 2, 3];
expect(arr).toEqual([1, 2, 3]);
});
});
Chỉ để biết thông tin:
toBe () so với toEqual (): toEqual () kiểm tra tính tương đương. toBe (), mặt khác, đảm bảo rằng chúng là cùng một đối tượng.
toBeCloseTo(expected,2)
nhưng có vẻ như không hoạt động.
Bạn có thể so sánh một mảng như được đề cập dưới đây nếu mảng có một số giá trị
it('should check if the array are equal', function() {
var mockArr = [1, 2, 3];
expect(mockArr ).toEqual([1, 2, 3]);
});
Nhưng nếu mảng được trả về từ một số hàm có nhiều hơn 1 phần tử và tất cả đều bằng 0 thì hãy xác minh bằng cách sử dụng
expect(mockArray[0]).toBe(0);
chỉ với bản ghi mà bạn luôn có thể so sánh bằng cách sử dụng JSON.opesify
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]));
Đó là tất cả các hương vị, điều này cũng sẽ làm việc cho các đối tượng nghĩa đen phức tạp
Tôi đã có một vấn đề tương tự trong đó một trong các mảng đã được sửa đổi. Tôi đã sử dụng nó cho $httpBackend
và đối tượng được trả về từ đó thực sự là một $promise
đối tượng có chứa mảng (không phải là một Array
đối tượng).
Bạn có thể tạo một công cụ ghép hoa nhài để khớp với mảng bằng cách tạo một toBeArray
hàm:
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);
}
});
});
Và sau đó chỉ cần sử dụng nó trong các thử nghiệm của bạn như các que diêm hoa nhài khác:
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]
vì nó chỉ kiểm tra các x.length
phần tử đầu tiên . Bạn có thể khắc phục điều này bằng cách kiểm tra if (x.length !== y.length) { return false; }
trước.
for (var i; ...)
=> x[undefined]
, var arraysAreSame = function ... var arraysAreSame = true
:(
expect([1]).toBeArray([2])
. Và bất kỳ mảng nào khác thực sự, bởi vìundefined + 1 => NaN