Ich habe eine Rails-Anwendung, die sich je nach Domäne, auf die zugegriffen wird, unterschiedlich verhält (z. B. www.myapp.com wird anders als user.myapp.com aufgerufen). In der Produktion funktioniert das alles gut, aber mein Testcode sieht immer einen Hostnamen von "www.example.com".
Gibt es eine saubere Möglichkeit, einen Test den Hostnamen angeben zu lassen, auf den er vorgibt zuzugreifen?
Lösung des Problems
Integrations-/Anforderungsspezifikationen (erben von
ActionDispatch::IntegrationTest
):host! 'my.awesome.host'
Siehe die Dokumentation, Abschnitt 5.1 Helpers Available for Integration Tests.
Alternativ konfigurieren Sie es global für Anforderungsspezifikationen auf der Ebene spec_helper.rb:
RSpec.configure do |config|
config.before(:each, type::request) do
host! 'my.awesome.host'
end
end
Controller-Spezifikationen (erben von
ActionController::TestCase
)@request.host = 'my.awesome.host'
Siehe die Dokumentation, Abschnitt 4.4 Verfügbare Instanzvariablen.
Funktionsspezifikationen (über Capybara)
Capybara.default_host = 'http://my.awesome.host'
# Or to configure domain for route helpers:
default_url_options[:host] = 'my.awesome.host'
Aus der Antwort von @AminAriana
Spezifikationen anzeigen (erben von
ActionView::TestCase
)@request.host = 'my.awesome.host'
...oder über RSpec:
controller.request.host = 'my.awesome.host'
Siehe die rspec-rails
View-Spec-Dokumentation.
Keine Kommentare:
Kommentar veröffentlichen