В моем приложении я использовал 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
Но все-таки я считаю, что это не идеал, что о вещах, определенных в моделях? Могу ли я перезагрузить свои модели и перед запуском спецификаций? Не будет ли дублировать такие вещи, как обратные вызовы?
На самом деле это не так. Поскольку блок before/after выполняется после загрузки Rails. –