2009-11-28 5 views
6

Ich habe folgende Filter definiert:Wie kann man eine Subdomain-Suche in Rails-Tests fälschen?

# 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 

und in meinem Test:

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

Jetzt test als Sub-Domain für ein Dummy-Konto definiert, die ich vor mit factory_girl auf alle Anfragen zu laden. Dies führt jedoch zu einem Null-Objektfehler, da @request gleich Null ist. Das Entfernen des Setup-Blocks führt dazu, dass alle meine Tests fehlschlagen, da find_account kein Konto findet und daher einen RecordNotFound Fehler ausgibt.

Was mache ich falsch?

+0

Ich habe das gleiche Problem bekam, haben Sie eine Lösung finden? – compostus

+0

Nützlich, um zu finden, dass Sie request_domains verwenden, um Subdomain zu erhalten, ich habe es von params [: subdomain] abgerufen, aber es funktioniert nicht, wenn ich @ request.host oder @ request.env ['HTTP_HOST'] –

Antwort

4

Versuchen Sie folgendes:

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

This ist das gleiche wie '@request.host = "test.myapp.local" 'AFAICS ... – compostus