2009-11-28 10 views
6

Tengo el siguiente filtro definido:¿Cómo falsificar una búsqueda de subdominio en las pruebas de Rails?

# application_controller.rb 
class ApplicationController < ActionController::Base 
    before_filter :find_account 

    private 

    def find_account 
     @current_account = Account.find_by_subdomain!(request.subdomains.first) 
    end 
end 

y en mi prueba:

# users_controller_test.rb 
class UsersControllerTest < ActionController::TestCase 
    setup do 
    @request.host = "test.myapp.local" 
    end 
    # ... 
end 

ahora test se define como el subdominio para una cuenta ficticia que me carga previa a todas las solicitudes usando factory_girl. Sin embargo, esto arroja un error de objeto nulo, diciendo que @request es nil. Al eliminar el bloque de configuración, todas mis pruebas fallan ya que find_account no puede encontrar una cuenta y, por lo tanto, arroja un error RecordNotFound.

¿Qué estoy haciendo mal?

+0

Tengo el mismo problema, has encontrado una solución? – compostus

+0

Resulta útil para encontrar que está utilizando request.subdomains para obtener el subdominio, solía obtenerlo de params [: subdomain] pero no funciona si configuro @ request.host o @ request.env ['HTTP_HOST'] –

Respuesta

4

Prueba esto:

@request.env['HTTP_HOST'] = 'test.myapp.local' 
+0

This es lo mismo que '@request.host = "test.myapp.local" 'AFAICS ... – compostus

Cuestiones relacionadas