2013-05-10 4 views
0

В моем приложении я использовал SettingsLogic для обработки настроек приложения (например, токенов facebook и т. Д.), Который представляет собой драгоценный камень, который в основном анализирует файл config/application.yml и обеспечивает легкий доступ к его контенту ,Настройки и тесты Rails

Я также использовал этот файл конфигурации, чтобы включить или отключить поддержку 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) Или мне нужно автоматизировать какой-то способ запуска 2 отдельных файлов тестов для обоих случаев i18n? Или, может быть, есть лучший способ?

Спасибо!

EDIT

Что касается вопроса маршрутов, мне удалось сделать спецификации обменивает свои настройки и перезагрузки маршрутов в явном виде:

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

На самом деле это не так. Поскольку блок before/after выполняется после загрузки Rails. –