내 앱에는 if request.get_host() == Site.objects.get_current().domain
줄이 있습니다. 문제는 내 검사에서이 조건은 절대로 True
입니다. request.get_host()
은 testserver
이고 Site.objects.get_current
은 example.com
을 반환합니다. 나는 을 request
에 추가 할 수 있다는 것을 알고 있지만 매 요청마다 전역 적으로 변경하고 싶습니다.테스트에서 Site.get_current()/request.get_host()를 재정의하는 방법
0
A
답변
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
을 무시할 수 있습니다. 이것은 전 세계적으로 잘 돌아갈 것이지만 조금 해킹 된 것처럼 보입니다. 그러기를 권합니다.