在测试期间修改Rails i18n配置?

时间:2016-06-16 18:00:21

标签: ruby-on-rails minitest ruby-on-rails-plugins

我尝试测试Rails插件,以确保在启用或未启用fallbacks的情况下执行正确的操作。在我的虚拟应用程序配置中,我有:

module Dummy
  class Application < Rails::Application
    config.i18n.fallbacks = true
  end
end

如何将其转回false进行特定测试?到目前为止,我已经尝试过:

Dummy::Application.config.i18n.fallbacks = false
Dummy::Application.configure do |app|
  app.config.i18n.fallbacks = false
end
Rails.application.config.i18n.fallbacks = false

一切都无济于事。

1 个答案:

答案 0 :(得分:2)

这是一个有趣的问题,实际上一旦应用程序在开始时初始化,您就无法更改i18n配置,因为它已经记录了这些codes

# Setup i18n configuration.
def self.initialize_i18n(app)
  return if @i18n_inited
  ...
  @i18n_inited = true
end

line

设置了I18n.fallbacks
I18n.fallbacks = I18n::Locale::Fallbacks.new(*args)

如果您将callbacks指定为true,则I18n.fallbacks的值为

[1] pry(main)> I18n.fallbacks
=> {}
[2] pry(main)> I18n.fallbacks.class
=> I18n::Locale::Fallbacks

way中使用了I18n.fallbacks

locales.concat(I18n.fallbacks[I18n.locale]) if I18n.respond_to? :fallbacks

只要I18n.respond_to? :fallbacks,该应用就会始终启用后备功能。

该方法在I18n中定义为here

def fallbacks
  @@fallbacks ||= I18n::Locale::Fallbacks.new
end

要关闭后备功能,唯一的方法是让I18n.respond_to? :fallbacks返回false

你走了:

class << I18n
  remove_method :fallbacks
end