2009-11-28 11 views
6

J'ai le filtre suivant défini:Comment truquer une recherche de sous-domaine dans les tests 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 

et dans mon test:

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

maintenant test est défini comme le sous-domaine pour un compte fictif que je charge avant toutes les demandes en utilisant factory_girl. Cependant, cela génère une erreur d'objet nulle, indiquant que @request est nul. La suppression du bloc d'installation entraîne l'échec de tous mes tests car find_account ne trouve pas de compte et déclenche donc une erreur RecordNotFound.

Qu'est-ce que je fais mal?

+0

J'ai le même problème, avez-vous trouvé une solution? – compostus

+0

Utile pour trouver que vous utilisez request.subdomains pour obtenir un sous-domaine, je l'ai utilisé depuis params [: subdomain] mais cela ne fonctionne pas si je mets @ request.host ou @ request.env ['HTTP_HOST'] –

Répondre

4

Essayez ceci:

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

est le même que '@request.host = "test.myapp.local" 'AFAICS ... – compostus