2016-06-16 2 views
1

Ich versuche ein Rails-Plugin zu testen, um sicherzustellen, dass die richtige Aktion mit oder ohne fallbacks ausgeführt wird. In meinem Dummy-Konfiguration der Anwendung, die ich habe:Ändern Sie Rails i18n Config während eines Tests?

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

Wie kann ich diese wieder auf false für einen bestimmten Test Flip? Bisher habe ich es versucht:

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

Alles vergebens.

+0

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

+0

@karlingen Dass ein guter Weg, um eine ähnliche Situation in rspec zu testen, aber Ich sehe nicht, wie man es hier anwendet? –

Antwort

2

Dies ist eine interessante Frage, tatsächlich einmal die App am Anfang initialisiert wurden, konnte man nicht i18n Konfiguration ändern, da es bereits mit diesem codes memoized bekam:

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

Und I18n.fallbacks wurde mit diesen line gesetzt

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

Wenn Sie die callbacks als true angeben, hat I18n.fallbacks einen Wert von

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

Solange I18n.respond_to? :fallbacks, die App auf immer haben Fallbacks Funktion aktiviert:

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

Und I18n.fallbacks wird in diesem way verwendet.

Verfahren here in I18n definiert:

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

Um die Fallbacks verfügen, ist der einzige Weg ausschalten I18n.respond_to? :fallbacks Rückkehr false zu machen.

Hier gehen Sie:

class << I18n 
    remove_method :fallbacks 
end 
+0

Larry, danke für die Hilfe. Es sieht so aus, als wäre das nicht der einzige Ort, der Rückschläge nutzt. Ich muss diesen Test vielleicht erst jetzt verlassen. Ich denke, ich teste den zugrundeliegenden Code trotzdem, was einfach albern ist. –

+0

ok, traurig, es hat nicht geholfen. –

Verwandte Themen