8

问题上下文:

假设config/locales/en.yml中有一些非常重要的行对存在至关重要。

en:
  foo:
    bar: "bubla!"
  • 我不想测试每一行但是
  • 我不希望测试太脆弱(所以没有 I18n.t('foo.bar').should =~ /bubla/)

所以我目前正在测试的方式是这样的

#spec/locals_spec.rb

require 'spec_helper'
describe I18n do
  it do
    I18n.t('date.datepicker').should be_kind_of(String)
  end
end

这样我只是确保翻译存在并且它不会继续(例如'foo.bar.car.lol'

但我仍然不满意

问题:使用 RSpec 测试 I18n 翻译的最佳实践是什么?我应该将它们放在 spec 文件夹的什么位置?

4

2 回答 2

7

检查这个 StackOverflow 问题以获得一些想法。我的首选方式是对同一问题的这个答案。

更新:这些天我倾向于使用i18n-tasks gem 来处理与 i18n 相关的测试,而不是我上面写的或者之前在 StackOverflow 上回答过的内容。

我想在我的 RSpec 测试中使用 i18n 主要是为了确保我对所有内容都有翻译,即没有翻译遗漏。i18n-tasks 可以通过对我的代码进行静态分析来做到这一点以及更多,因此我不再需要为所有人运行测试I18n.available_locales(除了在测试非常特定于语言环境的功能时,例如,从任何语言环境切换到任何其他语言环境)系统中的语言环境)。

这样做意味着我可以确认系统中的所有 i18n 键实际上都有值(并且没有一个是未使用或过时的),同时保持重复测试的数量,从而降低套件运行时间。

于 2012-07-05T20:22:36.857 回答
-1

我想我会为这样一个“关键”的事情写一个验收测试。

在大多数情况下,您需要在某些特定上下文中进行翻译,即。在日期选择器中显示某些内容。我会使用 capybara 或任何适用于 javascript 驱动程序的东西来测试该上下文。

如果您没有使用它的上下文,那么仅测试该翻译是否存在是没有用的。

于 2012-07-05T15:44:41.460 回答