2013-05-10 93 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