【发布时间】:2012-10-09 09:43:35
【问题描述】:
我想将我的测试与内化隔离开来。我使用 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">.
'Messages'来自我的真实config/locales/en.yml
我从控制台测试#store_translations 并且它有效。但是当我在帮助模块中将p I18n.t(translations.key.first) 放在ensure 之前的行时,它会显示旧的翻译。
感谢您的帮助!
【问题讨论】:
-
这是你在这里偶然发现的一件非常奇怪的事情。我一直在控制台中玩耍,但不确定发生了什么。
ensure在yield调用之后的任何内容之前被调用,这不应该发生...... -
您还在为此苦苦挣扎吗?我一直在摸索,但还没有一个明确的答案。
-
@shioyama,现在我在
Messagesword 上测试我的模块,现在也不知道如何修复它。 -
我明白了。我对这个问题很感兴趣,因为我想以这种方式将我的测试与国际化隔离开来。这应该工作......非常奇怪。我会继续努力的。
标签: ruby-on-rails internationalization rspec