【发布时间】:2015-05-30 00:05:04
【问题描述】:
我正在尝试修补一些 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
此时,some_file.js.erb 中的所有 I18n.t 调用确实都被替换了...但使用来自 I18n 文件的正确值,而不是 a JS interpolation ' " test。
换句话说,猴子补丁不会在 ERB 内部占据一席之地。有没有办法让我完成这项工作?
【问题讨论】:
-
I18n是在那种情况下引用::I18n还是一些Whatever::I18n? -
我没有在其他任何地方重新定义 I18n。我应该去
module ::I18n吗? -
值得一试。我不知道
module I18n是在什么上下文中执行的。 -
好的,去
::I18n完全解决了!想把它变成答案吗?很愿意接受。感谢您的帮助! -
你去。命名空间中的隐含层次结构可能会令人困惑,并且试图弄清楚为什么它不起作用可能会非常令人沮丧,
标签: ruby-on-rails ruby erb monkeypatching