在我的应用程序中,我使用SettingsLogic来处理应用程序的设置(例如facebook令牌等),这是一个基本上解析config / application.yml文件并提供对其内容的轻松访问的gem。
我还使用此配置文件启用或禁用整个应用的i18n支持,因为该应用更像是许多子应用的核心应用。
所以在我的 routes.rb 中,我会这样做:
if Settings.i18n.enabled
match ':this', :to => 'that#place'
end
或模型:
if Settings.i18n.enabled
scope :for_current_locale, lambda { where(:locale => I18n.locale) }
end
我想测试应用如何响应这两种状态:当i18n关闭时以及何时开启。
我的问题是当Rails初始化时从配置文件中读取状态。因此,当我运行测试时,我只能运行与i18n.enabled相关的测试为假,然后更改我的配置文件并运行与i18n.enabled相关的测试为真。
我有什么方法可以在两次测试之间重新初始化应用程序吗? (我正在使用Rspec) 或者我应该为两个i18n案例自动运行两个单独的测试文件? 或者也许有更好的方法?
谢谢!
修改
至于路线问题,我设法通过更改我的设置并明确重新加载路线来传递规格:
before(:all) do
Settings.i18n["enabled"] = true
My::Application.reload_routes!
end
但我觉得这不理想,模特中定义的内容怎么样?在运行规格之前,我可以重新加载我的模型吗?那不会像回调那样重复吗?
答案 0 :(得分:0)
我认为您可以像下面一样重新配置您的应用程序,例如在特定测试文件中的rspec before_all块中:
YourAppName::Application.configure do
config.i18n.enabled = true # or false
end
在after_all块中,您可以将配置设置回默认配置。 我认为这可行。