首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在测试中重写Site.get_current()/request.get_host()

如何在测试中重写Site.get_current()/request.get_host()
EN

Stack Overflow用户
提问于 2017-01-12 01:56:47
回答 1查看 532关注 0票数 0

在我的应用程序中,我有line if request.get_host() == Site.objects.get_current().domain。问题是在我的测试中,这个条件永远不是Truerequest.get_host()返回testserverSite.objects.get_current返回example.com。我知道我可以将SERVER_NAME添加到request中,但我希望在全局范围内进行更改,而不是在每个请求中进行更改。

EN

回答 1

Stack Overflow用户

发布于 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“。

因此,您的测试可能如下所示:

代码语言:javascript
运行
复制
from django.test import TestCase

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

如果您想在整个测试用例类中执行此操作,您可以像这样覆盖client_class

代码语言:javascript
运行
复制
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。这将在全球范围内工作,但它看起来有点老生常谈,所以我不建议你这样做。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41597585

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档