0

在我的应用程序中,我使用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 为 false 相关的测试,然后更改我的配置文件并运行与 i18n.enabled 为 true 相关的测试。

有什么方法可以在两次测试之间重新初始化应用程序吗?(我正在使用 Rspec)或者我应该以某种方式自动为两个 i18n 案例运行 2 个单独的测试文件?或者也许有更好的方法?

谢谢 !

编辑

至于路线问题,我设法通过更改我的设置并明确重新加载路线来使规范通过:

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

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

4

1 回答 1

0

我认为您可以简单地重新配置您的应用程序,如下所示,例如在特定测试文件中的 rspec before_all 块中:

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

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

于 2013-05-10T10:46:07.030 回答