2011-11-09 19 views

Trả lời

16

Để tăng ngoại lệ, bạn có thể xác định một lớp để xử lý lỗi bản địa hóa.

class TestExceptionLocalizationHandler 
    def call(exception, locale, key, options) 
    raise exception.to_exception 
    end 
end 

Sau đó, bạn gắn nó vào các trường hợp thử nghiệm mong muốn với

I18n.exception_handler = TestExceptionLocalizationHandler.new 

Bằng cách này bạn sẽ có được ngoại lệ huy động. Tôi không biết làm thế nào để nâng cao thất bại (với flunk) để có được kết quả tốt hơn.

+0

Tuyệt vời, đây chính xác là những gì tôi đang tìm kiếm. –

+1

"raise exception.message" trong phần nội dung của phương thức sẽ cung cấp cho bạn khóa bị thiếu dịch – jankubr

+3

Vì trình xử lý chỉ cần trả lời '# call', bạn có thể sử dụng lambda thay thế. – fphilipe

8

Tôi đã tạo trình khởi tạo này thành raise một ngoại lệ - args được chuyển vì vậy bạn sẽ biết khóa i18n nào bị thiếu!

# only for test 
if Rails.env.test? 

    # raises exception when there is a wrong/no i18n key 
    module I18n 
    class JustRaiseExceptionHandler < ExceptionHandler 
     def call(exception, locale, key, options) 
     if exception.is_a?(MissingTranslation) 
      raise exception.to_exception 
     else 
      super 
     end 
     end 
    end 
    end 

    I18n.exception_handler = I18n::JustRaiseExceptionHandler.new 

end 

Source

+0

Như của Rails 4.1.0 có một cách đơn giản hơn nhiều để làm điều này. Xem câu trả lời của tôi. – GMA

12

Tính đến Rails 4.1.0, bây giờ có một giải pháp tốt hơn so với các câu trả lời 4 tuổi cho câu hỏi này: thêm dòng sau vào tập tin cấu hình của bạn:

config.action_view.raise_on_missing_translations = true 

Tôi chỉ muốn thiết lập điều này trong môi trường test, nhưng bạn cũng có thể muốn đặt nó trong development. Tôi đặc biệt khuyên bạn không nên đặt nó thành true trong production.

+9

Cảnh báo: điều này sẽ làm tăng các lỗi thiếu bản dịch ** chỉ ** trong lượt xem và người trợ giúp. –

7

Rails 4.1+

Nâng dịch i18n thiếu ngoại lệ bạn cần hai điều:

1) Một initializer config/initializers/i18n_force_exceptions.rb:

module I18n 
    class ForceMissingTranslationsHandler < ExceptionHandler 
    def call(exception, locale, key, options) 
     if Rails.env.test? 
     raise exception.to_exception 
     else 
     super 
     end 
    end 
    end 
end 

I18n.exception_handler = I18n::ForceMissingTranslationsHandler.new 

2) Thiết lập cấu hình trong config/environments/test.rb (và các môi trường khác khi cần):

config.action_view.raise_on_missing_translations = true 

Lưu ý: Thiết lập cấu hình là cần thiết ngoài trình xử lý ngoại lệ vì đường ray kết thúc cuộc gọi đến I18n.translate trong chế độ xem và người trợ giúp ngăn chặn ngoại lệ kích hoạt.

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