2009-11-28 4 views
6

나는 정의 된 다음 필터가 있습니다레일즈 테스트에서 서브 도메인 룩업을 가짜로 만드는 방법은 무엇입니까?

# 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 [: subdomain]에서 가져 왔지만 @ request.host 또는 @ request.env [HTTP_HOST ']를 설정하면 작동하지 않습니다. –

답변

4

이 시도 :

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

This '@request.host = "test.myapp.local"'AFAICS ...와 동일합니다. – compostus

관련 문제