2013-05-10 126 views
0

在我的应用我用SettingsLogic处理应用程序的设置(如Facebook令牌等),这是基本上解析配置/ application.yml文件,并提供方便地访问其内容的宝石。Rails应用程序设置和测试

我已经使用此配置文件来启用或禁用整个应用国际化支持,为应用程序更是一个核心的应用程序的许多孩子的应用程序。

所以我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。

有没有一些方法,我可以重新初始化2次测试的应用程序? (我正在使用Rspec) 或者我应该自动化运行两个独立的测试文件的两种i18n情况的某种方式? 或者也许有更好的方法?

谢谢!

编辑

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

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

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

回答

0

我想你简单的可重新配置类似以下的应用,例如在rspec的before_all块特定的测试文件:

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

而且在after_all块可以设置配置恢复到默认的一个。 我认为这可以工作。

+0

其实事实并非如此。由于在加载Rails之后执行之前/之后的块。 – 2013-05-10 12:24:34

相关问题