ruby-on-rails - rspec 中的 i18n 翻译

标签 ruby-on-rails internationalization rspec

我想将我的测试与内化隔离开来。我使用 rails 3.2.8 和 rspec 2.11.1

我把这段代码放到 spec/support/translations.rb

module I18nHelpers
  def with_translations(locale, translations)
    I18n.backend.store_translations locale, translations
    yield
  ensure
    I18n.reload!
  end

结尾
RSpec.configure do |config|
  config.include I18nHelpers
end

然后我测试应用程序助手:
describe ApplicationHelper do
  context "messages" do
    it "show body" do
       with_translations :en, navigation: {messages: 'foo'} do
           concat messages_navigation
           assert_test 'span', 'foo'
       end
    end
  end
end

但是这个测试伴随着消息
Failure/Error: assert_select 'span', text: /foo/
     MiniTest::Assertion:
        </foo/> expected but was
        <"Messages">.

“消息”来自我的真实 config/locales/en.yml我从控制台测试#store_translations 并且它有效。但是当我把线 p I18n.t(translations.key.first)之前 ensure帮助模块中的单词,它显示了旧的翻译。

谢谢你的帮助!

最佳答案

I18n 完全隔离你可能想像这样切换后端:

def with_translations(locale, translations)
  original_backend = I18n.backend

  I18n.backend = I18n::Backend::KeyValue.new Hash.new, true
  I18n.backend.store_translations locale, translations

  yield
ensure
  I18n.backend = original_backend
end

关于ruby-on-rails - rspec 中的 i18n 翻译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12963021/

相关文章:

javascript - 光滑的 slider 视频复制

ruby-on-rails - "undefined method ` stub_request '"访问 RSpec 支持文件中的方法时

Javascript .toLocaleString() 返回错误的月份?

php - 无法使用多语言 codeigniter 摆脱 URL 中的默认 Controller

iphone - 多语言 iOS 应用程序

ruby-on-rails - 使用 Rails 2.3.8 和 Bundler 运行 RSpec 测试时为 "uninitialized constant"

ruby-on-rails - RSpec stub 方法可以按顺序返回不同的值吗?

javascript - 在 Javascript 中执行 ruby​​ 方法 - Ruby on Rails 应用程序

ruby-on-rails - 为什么安装 Ruby on Rails 会产生错误 "size of array ' ruby​​_check_sizeof_voidp' is negative”?

ruby-on-rails - 如何通过 rspec stub 静态类方法