Ruby on rails Rails应用程序设置和测试

Ruby on rails Rails应用程序设置和测试,ruby-on-rails,testing,rspec,settings,settingslogic,Ruby On Rails,Testing,Rspec,Settings,Settingslogic,在我的应用程序中,我用来处理应用程序的设置(如facebook令牌等),这是一个基本上解析config/application.yml文件并提供对其内容的轻松访问的gem 我还使用此配置文件启用或禁用了整个应用程序的i18n支持,因为该应用程序更像是许多子应用程序的核心应用程序 因此,在我的路线中.rb我会做以下事情: if Settings.i18n.enabled match ':this', :to => 'that#place' end 或在型号中: if Settings.

在我的应用程序中,我用来处理应用程序的设置(如facebook令牌等),这是一个基本上解析config/application.yml文件并提供对其内容的轻松访问的gem

我还使用此配置文件启用或禁用了整个应用程序的i18n支持,因为该应用程序更像是许多子应用程序的核心应用程序

因此,在我的路线中.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相关的测试(如果为false),然后更改配置文件并运行与i18n.enabled相关的测试(如果为true)

有没有办法在两次测试之间重新初始化应用程序?(我正在使用Rspec) 或者我应该为两种i18n情况自动运行两个单独的测试文件吗? 或者有更好的方法

谢谢

编辑

至于路由问题,我通过更改设置并明确地重新加载路由,成功地通过了规范:

before(:all) do
  Settings.i18n["enabled"] = true
  My::Application.reload_routes!
end

但我仍然觉得这并不理想,那么在模型中定义的东西呢?我可以在运行规格之前重新加载模型吗?这不会重复回调之类的内容吗?

我认为您可以像下面这样简单地重新配置应用程序,例如在特定测试文件中的rspec BEFOR\u all块中:

YourAppName::Application.configure do
  config.i18n.enabled = true # or false
end
在一个after_all块中,您可以将配置设置回默认配置。
我想那可能行得通。

实际上不行。因为before/after块是在加载Rails之后执行的。