在我的应用程序中,我有line if request.get_host() == Site.objects.get_current().domain。问题是在我的测试中,这个条件永远不是True。request.get_host()返回testserver,Site.objects.get_current返回example.com。我知道我可以将SERVER_NAME添加到request中,但我希望在全局范围内进行更改,而不是在每个请求中进行更改。
发布于 2017-01-12 04:56:35
您可以通过将HTTP_HOST传递给client.get()方法来控制request.get_host()行为。正如您所提到的,您可以使用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。这将在全球范围内工作,但它看起来有点老生常谈,所以我不建议你这样做。
https://stackoverflow.com/questions/41597585
复制相似问题