Rails rspec set subdominio

Estoy usando rSpec para probar mi aplicación. En mi controlador de aplicación tengo un método como ese:

def set_current_account @current_account ||= Account.find_by_subdomain(request.subdomains.first) end 

¿Es posible establecer el request.subdomain en mi especificación? Tal vez en el bloque anterior? Soy nuevo en rSpec, así que cualquier consejo sobre esto sería genial, gracias.

Eef

Descubrí cómo solucionar este problema.

En mi bloque anterior en mis especificaciones, simplemente agregué:

 before(:each) do @request.host = "#{mock_subdomain}.example.com" end 

Esto configura el request.subdomains.first para ser el valor del mock_subdomain.

Espero que alguien lo encuentre útil ya que no se explica muy bien en ningún otro lugar en la red.

Sé que esta es una pregunta relativamente antigua, pero he descubierto que esto depende del tipo de prueba que esté ejecutando. 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.

Solicitud de especificaciones

 before { host! "#{mock_subdomain}.example.com" } 

Características de la característica con Capybara

 before { Capybara.default_host = "http://#{mock_subdomain}.example.com" } after { Capybara.default_host = "http://www.example.com" } 

Normalmente creo módulos en spec/support que se parecen a 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 

Entonces puede llamar dentro de su especificación así:

 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 

En Rails 3, todo lo que intenté configurar manualmente para el host no funcionó, pero mirando el código noté lo bien que analizaron el camino que pasas a la solicitud de ayudantes como get . Efectivamente si su controlador va y busca al usuario mencionado en el subdominio y lo almacena como @king_of_the_castle

 it "fetches the user of the subomain" do get "http://#{mock_subdomain}.example.com/rest_of_the_path" assigns[:king_of_the_castle].should eql(User.find_by_name mock_subdomain) end 
  • Rspec – 3.6.0
  • Capibara – 2.15.1

La respuesta de Chris Peters funcionó para mí para las especificaciones de Request, pero para las características especiales, tuve que hacer los siguientes cambios:

rails_helper:

 Capybara.app_host = 'http://lvh.me' Capybara.always_include_port = true 

feature_subdomain_helpers:

 module FeatureSubdomainHelpers def within_subdomain(subdomain) before { Capybara.app_host = "http://#{subdomain}.lvh.me" } after { Capybara.app_host = "http://lvh.me" } yield end end