2015-05-11 15 views
9

Tôi đang cố gắng kiểm tra rằng hàm tạo của tôi sẽ ném một lỗi bằng cách sử dụng đá quý Teaspoon cho Rails, với ChaiJS làm thư viện xác nhận của tôi.ChaiJS mong đợi hàm tạo để ném lỗi

Khi tôi chạy thử nghiệm sau đây:

it('does not create the seat if x < 0', function() { 
    var badConstructor = function() { 
     return new Seat({ radius: 10, x: -0.1, y: 0.2, seat_number: 20, table_number: 30}); 
    }; 

    expect(badConstructor).to.throw(Error, 'Invalid location'); 
    }); 

tôi nhận được kết quả này:

thất bại:

1) Seat does not create the seat if x < 0 
    Failure/Error: undefined is not a constructor (evaluating 'expect(badConstructor).to.throw(Error(), 'Invalid location')') 

Các nhà xây dựng được ném ra lỗi, nhưng tôi nghĩ rằng tôi không viết kiểm tra đúng cách.

Khi tôi cố gắng chạy expect(badConstructor()) sau đó tôi nhận được kết quả:

Failures: 

    1) Seat does not create the seat if x < 0 
    Failure/Error: Invalid location 
+0

Có phải đó là 'expect (badConstructor())'? tức là, bạn cần gọi hàm. – Andy

+0

Tôi vừa thử nó - vô ích. Bây giờ tôi nhận được một đầu ra lỗi khác - tôi đã thêm nó vào OP. – ThomYorkkke

+0

Vì vậy, có vẻ như nó đang hoạt động bình thường vì "vị trí không hợp lệ" là một phần của thông báo lỗi. Bạn cần phải chọn điều đó trong bài kiểm tra của mình hoặc thêm câu lệnh 'try/catch' vào hàm của bạn để trả về lỗi mà bạn có thể kiểm tra. – Andy

Trả lời

21

Đã cùng một vấn đề. Kết hợp hàm tạo của bạn với hàm:

var fcn = function(){new badConstructor()}; 
expect(fcn).to.throw(Error, 'Invalid location'); 
+0

Cảm thấy giống như một chút của một workyound hacky, nhưng nó chắc chắn được công việc làm. – Connor

+0

Làm việc cho tôi. @Connor bất kỳ lý do tại sao nó "hacky"? – JohnnyQ

+0

@JohnnyQ Tôi muốn nói rằng, vào thời điểm đó, tôi chỉ quen thuộc với một trong những phong cách khẳng định của Chai. Gần một năm sau, mặc dù, nó không cảm thấy hacky cả. Nếu có thể, tôi sẽ hủy bỏ bình luận đó! – Connor

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