2013-03-30 44 views
166

Có cách nào trong jasmine.js để kiểm tra xem hai mảng đều bình đẳng, ví dụ:Jasmine.js so sánh mảng

arr = [1, 2, 3] 
expect(arr).toBe([1, 2, 3]) 
expect(arr).toEqual([1, 2, 3]) 

Không có vẻ để làm việc.

Trả lời

262

Chỉ cần làm các xét nghiệm và nó hoạt động với toEqual

hãy tìm thử nghiệm của tôi:

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]); 
    }); 
}); 

Chỉ cần cung cấp thông tin:

toBe() versus toEqual(): toEqual() checks equivalence. toBe(), on the other hand, makes sure that they're the exact same object.

+0

Hm, nhờ , có vẻ như là vấn đề là mảng tôi đang so sánh với được sửa đổi, do đó, nó làm một cái gì đó như arr = [1, 2, 3] arr ['pop'] = function() {...} mong đợi (arr) .toEquals ([1, 2, 3]) – user2032804

+1

làm thế nào để kiểm tra nếu các giá trị bằng nhau trong epsilon? ví dụ: kiểm tra của tôi không thành công Dự kiến ​​[-9, -6, 6, 3, 1.0000000000000004, 2] bằng [-9, -6, 6, 3, 1, 2]. – morpheus

+0

@morpheus - Tôi đã thử 'toBeCloseTo (dự kiến, 2)' nhưng nó dường như không hoạt động. – cod3monk3y

-1

Tôi đã có một simil ar vấn đề mà một trong những mảng đã được sửa đổi. Tôi đã sử dụng nó cho $httpBackend và đối tượng trả về từ đó thực ra là đối tượng $promise chứa mảng (không phải là đối tượng Array).

Bạn có thể tạo một khớp hoa nhài để phù hợp với mảng bằng cách tạo ra một hàm 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); 
    } 
    }); 
}); 

Và sau đó chỉ cần sử dụng nó trong các thử nghiệm của bạn như quẹt nhài khác:

it('should compare arrays properly', function() { 
    var array1, array2; 
    /* . . . */ 
    expect(array1[0]).toBe(array2[0]); 
    expect(array1).toBeArray(array2); 
}); 
+2

Tôi nhận được TypeError: this.addMatchers không phải là hàm – AndyTheEntity

+4

Hàm "arraysAreSame" mà bạn đã cung cấp sẽ cho kết quả dương tính giả cho các mảng 'x = [1,2]', 'y = [1,2,3 ] 'vì nó chỉ kiểm tra các phần tử' x.length' đầu tiên. Bạn có thể sửa lỗi này bằng cách kiểm tra 'if (x.length! == y.length) {return false; } 'trước. – warchinal

+1

@AndyTheEntity "Chức năng addMatchers không còn trên spec (this) nó bây giờ là trên đối tượng hoa nhài toàn cầu." - xem [Tài liệu Jasmine] (http://jasmine.github.io/2.0/upgrading.html) – rwisch45