Tôi muốn thử nghiệm một chức năng trên một trong các mô hình của tôi có các lỗi cụ thể. Chức năng trông giống như thế này:Rails ActiveSupport: Làm thế nào để khẳng định rằng lỗi được nâng lên?
def merge(release_to_delete)
raise "Can't merge a release with itself!" if(self.id == release_to_delete.id)
raise "Can only merge releases by the same artist" if(self.artist != release_to_delete.artist )
#actual merge code here
end
Bây giờ tôi muốn khẳng định rằng khi tôi gọi hàm này với tham số gây ra mỗi ngoại lệ, ngoại lệ thực sự bị ném. Tôi đã xem tài liệu ActiveSupport, nhưng tôi đã không tìm thấy bất cứ điều gì hứa hẹn. Bất kỳ ý tưởng?
Cảm ơn! Tôi đã phải sử dụng "RuntimeError" thay vì ngoại lệ, như thế này: assert_raise (RuntimeError) {artist1.merge (artist1)} Hướng dẫn này cực kỳ hữu ích: http://guides.rubyonrails.org/testing.html – spilliton
@spilliton: Thats vì trình thông dịch Ruby xử lý mã ở trên là 'assert_raise (Exception() {whatever.merge})', tức là nó tìm kiếm một phương thức gọi là 'Exception' được gọi với khối đã cho. Việc thêm dấu ngoặc đơn sẽ giải quyết sự mơ hồ đó. (Đã sửa câu trả lời) –
Trong rspec 3, sử dụng 'expect {whatever.merge}. To raise_error' (http://www.relishapp.com/rspec/rspec-expectations/v/3-1/docs/built- in-matchers/raise-error-matcher) –