Rails应用程序设置和测试

时间:2013-05-10 10:11:24

标签: ruby-on-rails testing rspec settings settingslogic

在我的应用程序中,我使用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

但我觉得这不理想,模特中定义的内容怎么样?在运行规格之前,我可以重新加载我的模型吗?那不会像回调那样重复吗?

1 个答案:

答案 0 :(得分:0)

我认为您可以像下面一样重新配置您的应用程序,例如在特定测试文件中的rspec before_all块中:

YourAppName::Application.configure do
  config.i18n.enabled = true # or false
end

在after_all块中,您可以将配置设置回默认配置。 我认为这可行。