Je sais que c'est une question relativement ancienne, mais j'ai constaté que cela dépend du type de test que vous exécutez. J'utilise également Rails 4 et RSpec 3.2, donc je suis sûr que certaines choses ont changé depuis que cette question a été posée.
Demande de spécifications
before { host! "#{mock_subdomain}.example.com" }
Spécifications des fonctionnalités avec Capybara
before { Capybara.default_host = "http://#{mock_subdomain}.example.com" }
after { Capybara.default_host = "http://www.example.com" }
Je crée généralement des modules dans spec/support
qui ressemblent à quelque chose comme ça :
# spec/support/feature_subdomain_helpers.rb
module FeatureSubdomainHelpers
# Sets Capybara to use a given subdomain.
def within_subdomain(subdomain)
before { Capybara.default_host = "http://#{subdomain}.example.com" }
after { Capybara.default_host = "http://www.example.com" }
yield
end
end
# spec/support/request_subdomain_helpers.rb
module RequestSubdomainHelpers
# Sets host to use a given subdomain.
def within_subdomain(subdomain)
before { host! "#{subdomain}.example.com" }
after { host! "www.example.com" }
yield
end
end
Inclure dans spec/rails_helper.rb
:
RSpec.configure do |config|
# ...
# Extensions
config.extend FeatureSubdomainHelpers, type: :feature
config.extend RequestSubdomainHelpers, type: :request
end
Ensuite, vous pouvez appeler dans votre spécification comme ceci :
feature 'Admin signs in' do
given!(:admin) { FactoryGirl.create(:user, :admin) }
within_subdomain :admin do
scenario 'with valid credentials' do
# ...
end
scenario 'with invalid password' do
# ...
end
end
end