【问题标题】:Ruby on Rails best practices in testing (flash msgs and views) and I18NRuby on Rails 测试(闪存消息和视图)和 I18N 的最佳实践
【发布时间】:2010-11-22 11:52:07
【问题描述】:

在测试 Flash 消息和生成的视图时,您是否应该以一种语言测试生成的输出:

should_set_the_flash_to /Hello/i

或者您是否应该将 I18N 带入您的测试:

should_set_the_flash_to I18n.t("sign_up.welcome")

我的问题可能不是正确的问题...如果已经有关于结合测试和 i18n 的很好解释,请随时通过链接回答...

更新:在 Arsen7 的回答之后输入正确的国际化代码,谢谢 Arsen7!

【问题讨论】:

    标签: ruby-on-rails testing internationalization


    【解决方案1】:

    这取决于您要测试什么。

    如果您测试 Flash 文本是否为“Hello”,那么您确定您知道您的用户将看到什么。

    另一方面,测试 flash 是否包含与给定字符串的帮助器“t”返回的内容相同的内容,有时也很有意义 - 例如,当您的翻译文件经常更改时,或者其内容是否由其他人创建, 一段时间后。

    我个人总是测试准确的最终翻译(assert_equal "Hello", flash[:message] 之类的东西)。

    它向我保证:1) 翻译听起来不错,2) 语言被正确识别(您不希望为您的英语用户提供波兰语消息,对吗?)

    关于你问题的第二部分:

    也许“should_set_the_flash_to I18n.t("sign_up.welcome")”会起作用?

    【讨论】:

    • 谢谢阿森7! (我用(工作的)I18n.t("sign_up.welcome") 代码更新了问题。
    • 也许我应该将我的问题重新表述为:如何将我的测试分成测试正确的视图或 Flash msg 是否呈现 (1),以及国际化是否按要求工作 (2) 和关键短语是否正确放置在语言环境 .yml 文件中?在我看来,对于 (1) 我宁愿选择 I18n.t("sign_up.welcome") (为了在我更改措辞时不会破坏测试)和对于 (3) 我会选择 assert_equal "Hello" , 闪现[:消息]。仍然存在:有没有一种方法可以系统地测试国际化在所有控制器和 Flash msgs 上都能正常工作?
    • 全部?也许在您测试的每个视图中结合两行测试:should_set_the_flash_to "Hello"; assert_equal "Hello", I18n.t("key")?当措辞发生意外更改时,您会收到通知,并且您会知道问题是在翻译更改还是输入错误的关键。但我想说,I18n 是否有效并不重要,只要渲染页面上的文本正确即可。测试效果,而不是实现——如果有一天你决定使用其他库而不是 I18n,你的测试仍然会报告成功(这会很好)。
    猜你喜欢
    • 2011-09-29
    • 1970-01-01
    • 1970-01-01
    • 2010-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-17
    相关资源
    最近更新 更多