2016-06-16 4 views
1

Я пытаюсь протестировать плагин Rails, чтобы убедиться, что правильное действие выполняется с включенным или отсутствующим fallbacks. Внутри конфигурации моего Манекен приложения, у меня есть:Изменить конфигурацию Rails i18n во время теста?

module Dummy 
    class Application < Rails::Application 
    config.i18n.fallbacks = true 
    end 
end 

Как я могу перевернуть это обратно false для конкретного теста? До сих пор я пробовал:

Dummy::Application.config.i18n.fallbacks = false 
Dummy::Application.configure do |app| 
    app.config.i18n.fallbacks = false 
end 
Rails.application.config.i18n.fallbacks = false 

Все безрезультатно.

+0

https://robots.thoughtbot.com/inject-that-rails-configuration-dependency – karlingen

+0

@karlingen Это отличный способ проверить подобную ситуацию в RSpec, но Я не вижу, как его применять здесь? –

ответ

2

Это интересный вопрос, на самом деле, как только приложение получило инициализируются в начале, вы не могли бы изменить конфигурацию i18n, потому что он уже получил memoized с этими codes:

# Setup i18n configuration. 
def self.initialize_i18n(app) 
    return if @i18n_inited 
    ... 
    @i18n_inited = true 
end 

И I18n.fallbacks был установлен с этим line

I18n.fallbacks = I18n::Locale::Fallbacks.new(*args) 

При указании callbacks как истинный, I18n.fallbacks имеет значение

[1] pry(main)> I18n.fallbacks 
=> {} 
[2] pry(main)> I18n.fallbacks.class 
=> I18n::Locale::Fallbacks 

И I18n.fallbacks используется в этом way:

locales.concat(I18n.fallbacks[I18n.locale]) if I18n.respond_to? :fallbacks 

Пока I18n.respond_to? :fallbacks, приложение всегда будет иметь откаты Функция включена.

Метод определяется here в I18n:

def fallbacks 
    @@fallbacks ||= I18n::Locale::Fallbacks.new 
end 

Чтобы выключить особенность в откаты, единственный способ это сделать I18n.respond_to? :fallbacks возвращение false.

Здесь вы идете:

class << I18n 
    remove_method :fallbacks 
end 
+0

Ларри, спасибо за помощь. Похоже, это не единственное место, где используются резервные копии. Мне просто нужно оставить этот тест на данный момент. Думаю, я все равно тестирую базовый код, что просто глупо. –

+0

хорошо, грустно это не помогло. –