Tôi muốn Rails tăng ngoại lệ khi bản dịch I18n bị thiếu trong môi trường thử nghiệm (thay vì hiển thị văn bản 'mất dịch'). Có cách nào đơn giản để đạt được điều này?Rails: Làm cách nào để tăng dịch I18n bị thiếu ngoại lệ trong môi trường thử nghiệm
Trả lời
Để 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.
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
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
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
.
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. –
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.
- 1. Làm thế nào để chạy Rails console trong môi trường thử nghiệm với Zeus?
- 2. Làm cách nào để tăng ngoại lệ trong Rails để nó hoạt động giống như các ngoại lệ Rails khác?
- 3. Có thể chạy thử nghiệm đơn vị Rails trên môi trường khác với thử nghiệm không?
- 4. Xây dựng thử nghiệm Môi trường Citrix
- 5. Làm cách nào để xử lý ngoại lệ trong chuỗi nền trong thử nghiệm đơn vị?
- 6. Twitter Môi trường thử nghiệm Bootstrap
- 7. Làm cách nào để xác định và đặt thuộc tính môi trường bị thiếu trong Maven?
- 8. Mỏng làm tăng các ngoại lệ mẫu bị thiếu hiếm khi
- 9. Làm thế nào để sử dụng TDD trong môi trường không phải là "Thử nghiệm"
- 10. Thay đổi biến theo yêu cầu môi trường trong Rails tích hợp thử nghiệm
- 11. Thiếu ngoại lệ trong quy trình tăng cường
- 12. Generalized dịch ngoại lệ cho tăng python
- 13. I18n: Cách kiểm tra xem cặp khóa/giá trị dịch có bị thiếu không?
- 14. GoogleTest: Truy cập Môi trường từ Thử nghiệm
- 15. Ném ngoại lệ trong khối Thử nghiệm PHP
- 16. Làm cách nào để chuẩn bị bộ thử nghiệm của ứng dụng Rails 3
- 17. Làm thế nào để tăng ngoại lệ trong Delphi?
- 18. Thử nghiệm Google Analytics/môi trường hộp cát?
- 19. MSTest: làm thế nào để tăng thời gian thử nghiệm
- 20. C#, NUnit: Làm thế nào để đối phó với thử nghiệm của trường hợp ngoại lệ và thực hiện chậm
- 21. ruby - tăng ngoại lệ với ngoại lệ
- 22. Nhiều thử nghiệm trong thử/ngoại trừ khối
- 23. Làm cách nào để bật các lỗi dịch Rails I18n trong chế độ xem?
- 24. default_url_options Thiết trong môi trường thử nghiệm dường như không làm việc
- 25. Ngoại lệ 4.0 ngoại lệ khi chạy thử nghiệm đơn vị
- 26. NUnit: thử nghiệm với KHÔNG mong đợi ngoại lệ
- 27. Làm thế nào để tạo một môi trường mới trong Ruby on Rails?
- 28. Làm cách nào để tôi mong đợi điều gì đó làm tăng ngoại lệ trong RSpec?
- 29. Tạo môi trường mới trong Rails
- 30. Làm cách nào để đặt trong pom để không biên dịch thử nghiệm?
Tuyệt vời, đây chính xác là những gì tôi đang tìm kiếm. –
"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
Vì trình xử lý chỉ cần trả lời '# call', bạn có thể sử dụng lambda thay thế. – fphilipe