Ich teste meine Anwendung mit Cucumber und es funktionierte, bevor ich die automatische Erkennung von Gebietsschemata vom WWW-Browser in application_controller.rb hinzugefügt habe:
before_filter :set_locale
private
def set_locale
xxx = request.env['HTTP_ACCEPT_LANGUAGE'].scan(/^[a-z]{2}/).first
if xxx.match /^(en|fr)$/
I18n.locale = xxx
else
I18n.locale = 'en'
end
end
Ich habe ein Szenario:
Scenario: Successful sign up
Given I am an anonymous user
And I am on the home page
When ...
Wenn ich laufe Gurke erhalte ich eine Fehlermeldung:
Given I am an anonymous user # features/step_definitions/user_steps.rb:7
And I am on the home page # features/step_definitions/webrat_steps.rb:6
private method `scan' called for nil:NilClass (NoMethodError)
C:/workspace/jeengle/app/controllers/application_controller.rb:33:in `set_locale'
c:/worktools/ruby/lib/ruby/1.8/benchmark.rb:308:in `realtime'
(eval):2:in `/^I am on (.+)$/'
features/manage_users.feature:8:in `And I am on the home page'
Ich habe versucht, es zu tun in vor Anweisung im Ordner step_definitions:
Before do
request.env['HTTP_ACCEPT_LANGUAGE'] = "en"
end
aber ich habe einen anderen Fehler:
undefined method `env' for nil:NilClass (NoMethodError)
Weiß jemand, wie man eine Initialisierung/Emulation request.env['HTTP_ACCEPT_LANGUAGE'] in Gurke?
AKTUALISIERT
Cucumber-Test bestanden, als ich umgeschrieben habe festlegen_ort Methode:
xxx = request.env['HTTP_ACCEPT_LANGUAGE']
if xxx
xxx = xxx.scan(/^[a-z]{2}/).first
if xxx.match /^(en|ru)$/
I18n.locale = xxx
end
else
I18n.locale = 'en'
end
Es ist keine Lösung, aber es funktioniert.