2017-01-11 5 views
0

내 앱에는 if request.get_host() == Site.objects.get_current().domain 줄이 있습니다. 문제는 내 검사에서이 조건은 절대로 True입니다. request.get_host()testserver이고 Site.objects.get_currentexample.com을 반환합니다. 나는 을 request에 추가 할 수 있다는 것을 알고 있지만 매 요청마다 전역 적으로 변경하고 싶습니다.테스트에서 Site.get_current()/request.get_host()를 재정의하는 방법

답변

0

HTTP_HOST에서 client.get()까지의 방법으로 request.get_host() 동작을 제어 할 수 있습니다. 언급 한대로 SERVER_NAME을 사용할 수 있지만 get_host()에 의해 사용되며 SERVER_NAME이 SERVER_PORT 변수와 관련하여 사용되므로 일부 기본 포트가 아닌 다른 서버에서 "SERVER_NAME : SERVER_PORT"를 얻을 수 있으므로 HTTP_HOST를 사용하는 것이 좋습니다. 사례.

그래서 테스트는 다음과 같이 수 :

from django.test import TestCase 

class FooTests(TestCase): 
    def test_bar(self): 
     self.client.get('/', HTTP_HOST='example.com') 

당신이 전체 테스트 케이스 클래스를 수행 할 경우이 같은 client_class을 재정의 할 수

from django.test import TestCase 
from django.test.client import Client 


class MyClient(Client): 
    HTTP_HOST = 'example.com' 

    def get(self, *args, **kwargs): 
     kwargs.setdefault('HTTP_HOST', self.HTTP_HOST) 
     return super(MyClient, self).get(*args, **kwargs) 


class MyTestCase(TestCase): 
    client_class = MyClient 


class FooTests(MyTestCase): 
    def test_foo(self): 
     self.client.get('/') 

또는 당신은 쓸 수 있습니다 내 이전 예제와 비슷한 모양의 TestCase에 대한 Mixin.

마지막으로 django.test.TestCase.client_class을 무시할 수 있습니다. 이것은 전 세계적으로 잘 돌아갈 것이지만 조금 해킹 된 것처럼 보입니다. 그러기를 권합니다.

관련 문제