猴子修补范围:外部功能不影响ERB

时间:2015-05-30 00:05:04

标签: ruby-on-rails ruby erb monkeypatching

我试图修补一些I18n方法来测试正确的转义。在测试中执行此操作,它类似于:

test "JS files should be using correct escaping" do
  module I18n
    def self.t(*args)
      %q{a JS interpolation ' " test}
    end
  end
  filename = Rails.root + "app/assets/some_file.js.erb"
  erb = ERB.new(File.read(filename))
  result = erb.run
end

此时,I18n.t中的所有some_file.js.erb次呼叫确实已被替换...但是来自I18n文件的正确的值,而不是{{1} }。

换句话说,猴子补丁并没有在ERB中占据一席之地。我有办法让这项工作吗?

1 个答案:

答案 0 :(得分:1)

我猜你的module I18n实际上并未开启::I18n,这可能是在意外情况下执行的,因此您实际上正在打开{ {1}}模块,用于某些SomethingUnexpected::I18n测试框架的一部分。

最简单的方法是明确声明您希望在顶级命名空间中工作:

SomethingUnexpected