2009-11-28 18 views
6

Ho il seguente filtro definito:Come simulare una ricerca di sottodominio nei test di 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 

e nel mio test:

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

Ora test è definito come il sottodominio per un account fittizio che si carica prima di tutte le richieste utilizzando factory_girl. Tuttavia, si tratta di un errore nullo dell'oggetto, dicendo che @request è nullo. La rimozione del blocco di installazione causa il fallimento di tutti i miei test poiché find_account non riesce a trovare un account e pertanto genera un errore RecordNotFound.

Cosa sto sbagliando?

+0

Ho lo stesso problema, ha trovato una soluzione? – compostus

+0

Utile per scoprire che stai usando request.subdomains per ottenere il sottodominio, ho usato per ottenerlo da params [: sottodominio] ma non funziona se ho impostato @ request.host o @ request.env ['HTTP_HOST'] –

risposta

4

Prova questo:

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

Questo è lo stesso di '@request.host = "test.myapp.local" 'AFAICS ... – compostus

Problemi correlati