如何使用Rails前置的模块测试I18n模块?

时间:2018-10-30 23:12:57

标签: ruby-on-rails ruby-on-rails-4 rspec rails-i18n

我有一个I18n前面的模块:

require 'rails-i18n'

module I18nExtension
  def translate_localization_format(locale, object, format, options)
    puts __method__
    ...
  end 
end

I18n::Backend::Base.prepend(I18nExtension)

这在开发和控制台中按预期工作:

irb(main):002:0>I18n.l Time.now
translate_localization_format
=> "October 30, 2018 16:01 PDT"

它居住在lib/i18n_ext中。

但是,在测试环境中,扩展方法未调用:

describe I18n do
  specify "success" do
    puts I18n.l Time.now
  end
end

此代码不会 打印方法或调用I18nExtension#translate_localization_format

但是,在这两种环境中都将模块置于前面。

irb(main):002:0> I18n::Backend::Base.ancestors.inspect
=> "[I18nExtension, I18n::Backend::Base, I18n::Backend::Transliterator]"

测试环境:

[I18nExtension, I18n::Backend::Base, I18n::Backend::Transliterator]

那么,扩展名怎么可能是前缀但未被调用?开发和测试环境有什么区别?

导轨4.2.10
rails-i18n 4.0.9
rspec 3.7.0

0 个答案:

没有答案