【问题标题】:Are all exceptions supressed in Rail integration tests?Rail 集成测试中是否抑制了所有异常?
【发布时间】: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


【解决方案1】:

好的,views 中关于翻译的 cmets 告诉我的是,有一个扩展 I18n.t()ActionView::Helper::Translation 类,因此它会抛出我所期望的异常。然而,我的测试包括在 控制器 中测试一些代码,该控制器通过调用 t() 设置一些“Flash”。在控制器的上下文中,这是基本的t(),所以当出现问题时我不会收到异常。
所以要么我可以忍受这个,对get() 和我已经指出的类似函数进行顽皮的扩展,或者我可以扩展ApplicationController 类来添加这个函数,但似乎我可以创建一个@ 987654327@ 镜像 View 助手。

【讨论】:

  • 仅供参考,我现在已经放弃了这种发现缺失翻译的方法,我正在使用i18n-tasks gem。它具有命令行工具,可用于创建“I18n 集成测试”,以发现缺失和未使用的翻译。如果你使用 YAML 别名,你可以配置 i18n-tasks 在你的测试中忽略这些。
猜你喜欢
  • 2021-12-28
  • 1970-01-01
  • 2022-01-02
  • 2021-08-25
  • 2011-12-12
  • 2019-06-11
  • 2019-02-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多