在我的应用中,我有一行if request.get_host() == Site.objects.get_current().domain
。问题出在我的测试中,这个条件永远不会True
。 request.get_host()
返回testserver
,Site.objects.get_current
返回example.com
。我知道我可以将SERVER_NAME
添加到request
,但我希望全局更改而不是每次请求。
答案 0 :(得分:0)
您可以通过将 HTTP_HOST 传递给request.get_host()
方法来控制client.get()
行为。您可以使用SERVER_NAME,如上所述,但首选HTTP_HOST,因为get_host()按原样使用它,而SERVER_NAME用于SERVER_PORT变量,因此您可以获得" SERVER_NAME:SERVER_PORT"在一些非默认端口的情况下。
所以你的测试看起来像这样:
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
。这将在全球范围内工作,但它看起来有点hacky,所以我不建议你这样做。