问题背景:
让我们说 config / locales / en.yml 中存在一些非常重要的行,这对于存在至关重要。
en:
foo:
bar: "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文件夹中放置它们?
答案 0 :(得分:5)
检查this StackOverflow question以获取一些想法。我在同一个问题上的首选方式是this answer。
更新:这些天我倾向于使用i18n-tasks gem来处理与i18n相关的测试,而不是我上面写的或之前在StackOverflow上回答过的。
我想在我的RSpec测试中使用i18n主要是为了确保我对所有内容都有翻译,即没有错过任何翻译。通过对我的代码进行静态分析,i18n-tasks可以做到这一点,所以我不再需要为所有I18n.available_locales
运行测试了(除了测试特定于语言环境的功能时,例如,从任何语言环境到系统中的任何其他语言环境。)
这样做意味着我可以确认系统中的所有i18n密钥实际上都有值(并且没有未使用或已过时),同时保持重复测试的数量,从而保持套件运行时间的下降。
答案 1 :(得分:-1)
我认为我会为这样一个“至关重要”的事情写一个验收测试。
在大多数情况下,您需要在某些特定环境中进行翻译,即。在日期选择器中显示内容。我会使用capybara或任何与javascript驱动程序一起使用来测试该上下文。
如果你没有在其中使用的上下文,只测试这个翻译是否无用。