我想讓Rails在測試環境中缺少I18n翻譯(而不是呈現文本'翻譯缺失')時引發異常。有沒有簡單的方法來實現這一點?Rails:如何在測試環境中提升I18n翻譯缺少異常
回答
要引發異常,您可以定義一個類來處理本地化錯誤。
class TestExceptionLocalizationHandler
def call(exception, locale, key, options)
raise exception.to_exception
end
end
然後你把它連接到所需的測試例
I18n.exception_handler = TestExceptionLocalizationHandler.new
這樣你引發的異常。我不知道如何提高失敗率(以失敗告終)以取得更好的結果。
我已經創建了這個初始化程序到raise
一個異常 - 參數已通過,因此您將知道哪個i18n鍵已丟失!
# 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
從Rails 4.1.0開始,有一個簡單的方法可以做到這一點。看到我的答案。 – GMA
鐵軌4.1.0的,還有比現在4歲回答這個問題更好的解決方案:將下面的行添加到您的配置文件:
config.action_view.raise_on_missing_translations = true
我只想在test
環境中設置此項,但您可能也想將其設置爲development
。我強烈建議不要在production
中將其設置爲true。
警告:這將在視圖和幫助程序中引發翻譯缺失錯誤** only **。 –
的Rails 4.1+
爲了提高國際化翻譯失蹤例外,你需要件事:
1)初始化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)config/environments/test.rb
一個配置設置(和其他需要的環境):
config.action_view.raise_on_missing_translations = true
注意:除了異常處理程序之外,還需要配置設置,因爲rails在其視圖中將調用包裝爲I18n.translate
,助手阻止異常觸發。
- 1. Rails I18n-js:缺少翻譯
- 2. 如何在特定語言環境中缺少翻譯時將i18n配置爲使用en語言環境?
- 3. 如何在Rails/RSpec中測試異常提升?
- 4. Rails + Devise:缺少my_sessions翻譯
- 5. 將Rails的i18n語言環境添加翻譯
- 6. Rails I18n:當我嘗試翻譯這個詞「off」時出錯'翻譯缺失'
- 7. 當i18n翻譯缺失時,simple_form似乎不會引發異常?
- 8. 在視圖中顯示缺少的I18n翻譯
- 9. 添加I18n翻譯到rspec測試
- 10. 缺省語言環境,如果在Rails中缺少語言環境
- 11. 升壓過程中缺少異常
- 12. Rails select_tag與i18n翻譯
- 13. Rails I18n嵌套翻譯鍵
- 14. 在activerecord中存儲i18n翻譯 - rails 3.2
- 15. simple_form缺少翻譯
- 16. Rails I18n:縮短翻譯請求(至少在視圖中)
- 17. 的Rails I18N和缺少翻譯:找出其中T(...)方法被調用
- 18. Rails 3是否缺少錯誤翻譯?
- 19. 如何測試用的I18n翻譯Ruby代碼中的RSpec
- 20. 在測試環境中調試Ruby/Rails
- 21. 異常生成測試環境
- 22. 提升:雖然編譯,缺少庫
- 23. 在php中翻譯模型異常 - Zf2 - Zend i18n - Poedit
- 24. 如何翻譯Symfony2異常
- 25. Rails 3中的I18n label_tag翻譯
- 26. Rails I18n,檢查翻譯是否存在?
- 27. rails3 i18n accepts_nested_attributes_for如何翻譯?
- 28. 如何翻譯i18n Plone actions.xml
- 29. 扶手:引起缺失的I18n翻譯
- 30. Symfony2語言環境檢測和翻譯
太棒了,這正是我要找的。 –
方法體內的「raise exception.message」會給你缺少翻譯的密鑰 – jankubr
因爲處理程序只需要響應'#call',所以你可以使用lambda代替。 – fphilipe