Sé que esto es una cuestión relativamente antiguo, pero me he dado cuenta que esto depende del tipo de prueba que esta corriendo También estoy ejecutando Rails 4 y RSpec 3.2, así que estoy seguro de que algunas cosas han cambiado desde que se hizo esta pregunta.
Solicitar Especificaciones
before { host! "#{mock_subdomain}.example.com" }
Especificaciones de función con Carpincho
before { Capybara.default_host = "http://#{mock_subdomain}.example.com" }
after { Capybara.default_host = "http://www.example.com" }
Por lo general crear módulos en spec/support
que miran algo como esto:
# 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
Incluir en spec/rails_helper.rb
:
RSpec.configure do |config|
# ...
# Extensions
config.extend FeatureSubdomainHelpers, type: :feature
config.extend RequestSubdomainHelpers, type: :request
end
A continuación, puede llamar dentro de su especificación de este modo:
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
one small tip - request is availab le como un método así como una variable de instancia. Probablemente sea mejor acceder a él a través del método, para mantener una pequeña distancia entre usted y el código RSpec subyacente. – pat
¿Puedo preguntar cómo se hace el método? – lulalala
@lulalala 'request.host =" # {mock_subdomain} .example.com "' – alf