【发布时间】:2023-03-14 13:18:01
【问题描述】:
我最近在 Rails 项目中发现了一个缺失的 I18n 翻译,但我在测试环境中启用了异常,所以我预计会在测试期间找到它。似乎集成测试很乐意忽略异常,或者 I18n 选择不抛出异常。
这只是 Rails 的工作方式,还是我以某种方式启用了一些魔法标志?我可以创建一个单元测试来重现该问题,但由于我已经有一个完全匹配正确代码的集成测试,如果我可以使用它会很好。
【问题讨论】:
-
您使用的是哪个版本的 Rails?
raise_on_missing_translations适用于 4.1.0 及更高版本。见这里:robots.thoughtbot.com/foolproof-i18n-setup-in-rails -
4.2.2.我怀疑某处有问题,因为我现在已经编写了一个控制器测试并且它也没有捕获异常。但它是 100% 可重现的“实时”,我的 flash 文字说:
translation missing: en.xxxxsignup_welcome它是真实的,我确切地知道修复是什么,但我希望我的测试首先工作。 -
嗯,这不是因为我将文本放入'flash'中吗?根据 I18n 文档,文本应包含在
span class="translation_missing">中,但查看我页面的源代码时,我看不到这一点。是否使用“flash”(或引导程序?)剥离了这种格式?当页面上的其他地方缺少翻译时,我确实看到了例外情况。 -
该设置仅捕获视图中缺少的翻译 - 如果您在控制器或模型中缺少翻译,它们将不会被捕获。
-
这不是我所看到的。我的大多数控制器测试都正确地抛出了异常;只是这一项使用“Flash”的测试没有。同样,我有一个集成测试也没有发现错误。仅供参考,为了解决这个问题,我使用 'alias_method' 允许我在 ActionController::TestCase 中重新定义 'get' 来执行原始的 'get',然后在任何成功的响应中寻找明确的 'Missing translation:' 文本。对 ActionDispatch::IntegrationTest 的其他函数也这样做。这既有趣又令人讨厌,但在“仅限测试”课程中,所以应该没问题。
标签: ruby-on-rails testing internationalization integration