2009-01-28 26 views
5

Có cách tích hợp xác định các xác nhận trong Rails sẽ ném một ngoại lệ nếu một bất biến bị hỏng trong quá trình phát triển và thử nghiệm không?Các xác nhận trong Rails từ các mô hình hoặc bộ điều khiển?

Chỉnh sửa: Chỉ cần rõ ràng, tôi đang tìm kiếm các xác nhận có thể được đặt trong các mô hình hoặc bộ điều khiển thay vì xác nhận rằng bạn sẽ sử dụng cho các bài kiểm tra đơn vị.

Trả lời

9

Có nhiều hàm xác nhận nếu bạn đang viết kiểm tra. Nhưng đối với assertiona trong mã chính, không có bất kỳ và bạn có thể cuộn của riêng bạn một cách dễ dàng.

Thêm một cái gì đó như thế này để environment.rb:

class AssertFailure < Exception 
end 

def assert(message = 'assertion failed') 
    unless block_given? and yield 
    raise message 
    end 
end 

và làm cho nó một không-op trong environments/production.rb của bạn để có tối thiểu chi phí

def assert(message = 'assertion failed') 
end 

Sau đó, trong mã của bạn, bạn có thể khẳng định để nội dung trái tim của bạn:

assert { value == expected_value } 
assert('value was not what was expected') { value == expected_value } 

Nếu value không bằng expected_value và bạn không chạy trong sản xuất, ngoại lệ sẽ được nâng lên.

+0

Tôi không chắc chắn nếu phương pháp khẳng định được dự định là một phương pháp của lớp AssertFailure ở trên hay không. Nó không giống như nó nên, nhưng nếu tôi sử dụng mã tôi nhận được một "kết thúc $ không mong đợi, mong đợi keyword_end" lỗi. Bạn có thể vui lòng xây dựng và chỉ ra nếu yêu cầu/bao gồm là cần thiết để sử dụng xin vui lòng? (cũng - nó có vẻ giống như một phần của việc triển khai ứng dụng - vì vậy thư mục cấu hình là một nơi thích hợp cho mã như vậy?) – DavidJ

+0

Tôi nghĩ rằng nên có một dòng 'end' ngay sau dòng' class'. – dubek

+0

Bạn có thể giải thích những gì tuyên bố lớp học đang làm ở đó không? làm thế nào nó đi vào chơi? –

1

Ngoài these, ý của bạn là gì?

+0

Tôi tin rằng OP đang nói về các xác nhận trong mã chính, trái ngược với các xác nhận kiểm tra. –

+0

Khó nói, phải không? :) –

+0

một chút, vâng;) –

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