2015-11-22 19 views
7

Tôi đang cố gắng triển khai các chức năng để in kim cương về phát triển thử nghiệm theo hướng kiểm tra trong javascript.Jasmine ném lỗi trên mong đợi() .Thay đổi thay vì xác định lỗi được ném

Diamond.prototype.outerSpace = function (current, widest) { 

    var currentValue = this.getIndexOf(current); 
    var widestValue = this.getIndexOf(widest); 

    if (currentValue > widestValue) { 
     throw new Error('Invalid combination of arguments'); 
    } 

    var spaces = widestValue - currentValue; 
    return new Array(spaces + 1).join(' '); 
}; 

Tôi gặp sự cố trong Xử lý lỗi. Hàm trên sẽ ném một lỗi, nếu currentValue lớn hơn widestValue.

Đây là đoạn tôi đại diện cho các thử nghiệm/spec:

it ("should throw an exception, if it is called with D and C", function() { 
    var outerSpace = diamond.outerSpace.bind(diamond, 'D', 'C'); 
    expect(outerSpace).toThrow('Invalid combination of arguments'); 
}); 

Tôi đã thử còn với một chức năng ẩn danh trong mong đợi (..), nhưng điều này cũng không làm việc.

Thông báo Console là: Chức năng dự kiến ​​sẽ ném 'Inval ...' nhưng nó ném Lỗi: Kết hợp các đối số không hợp lệ.

Tôi không hiểu, tôi nên làm gì với thông tin này.

Chỉnh sửa: Thật kỳ lạ, bởi vì nó hoạt động với Jasmine v.1.3, nhưng nó không hoạt động với hoa nhài v.2.3 tức là hay với nghiệp, mặc dù mã dựa trên hoa nhài.

Trả lời

9

TL; DR

Với Jasmine 2 quẹt ngữ nghĩa thay đổi và có một khớp mới.

Sử dụng toThrowError("<message>") hoặc toThrow(new Error("<message>")))

NTL; TR

Kể từ Jasmine 2.x có một Matcher mới toThrowError() và Jasmine toThrow() trở thành một ngữ nghĩa mới.

  • toThrow() nên được sử dụng để kiểm tra xem bất kỳ lỗi đã ném hoặc để kiểm tra các thông điệp của một Error (cụ thể hơn: someting đó là instanceof Error)
  • toThrowError() nên được sử dụng để kiểm tra xem một cụ lỗi được ném hoặc nếu thông báo lỗi bằng với mong đợi

Nội bộ toThrow(x) kiểm tra bình đẳng lỗi được ném đối với x. Nếu cả lỗi và xinstanceof Error (điều này cũng đúng đối với TypeError ví dụ) Kiểm tra bình đẳng Jasmine (=== nói chung) của cả hai bên thuộc tính message.

Dạng toThrowError(x) kiểm tra xem các thông báo lỗi bằng hoặc phù hợp với x (string hoặc RegExp)

Các hình thức khác toThrowError(t, x) kiểm tra xem lỗi này là loại t và thông điệp bằng hoặc phù hợp với x (string hoặc RegExp)

Xem

Các vấn đề liên quan