2009-11-28 8 views
6

私は定義された次のフィルタを持っている: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 

と私のテストで:

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

testは私がfactory_girlを使用して、すべての要求に先立ってロードダミーアカウントのサブドメインとして定義されます。しかし、これは@requestがnilであるという無名オブジェクトエラーを投げています。セットアップブロックを削除すると、find_accountがアカウントを見つけることができないため、すべてのテストが失敗し、RecordNotFoundというエラーがスローされます。

私は間違っていますか?

+0

を、あなたは解決策を見つけましたか? – compostus

+0

サブドメインを取得するためにrequest.subdomainsを使用していることがわかりました。私はparams [:サブドメイン]から取得していましたが、@ request.hostまたは@ request.env [HTTP_HOST ']を設定すると動作しません。 –

答えて

4

このお試しください:私は同じ問題を持っている

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

'@request.host = "test.myapp.local" 'AFAICSと同じです... – compostus

関連する問題