如何让Django测试客户端向不同的子域发送请求

时间:2014-02-16 03:20:41

标签: python django subdomain django-urls django-testing

我正在使用django-subdomains项目在我的django项目中启用子域,这项工作正常。

但是,在编写测试时,我无法弄清楚如何让Django测试客户端向不同的子域发送请求。

它仅向根域发送请求,即使我将ROOT_URLCONF更改为指向带有@override_settings的SUBDOMAIN_URLCONFS中的一个条目。但是如果我直接将settings.py中的ROOT_URLCONF更改为所需的子域urlconf,它就可以工作,这显然是一个不可接受的解决方案。

还试图继承Django TestCase类并将“url”字段设置为子域urlconf,但请求仍然是root,导致404.

最后,我尝试使用subdomains.utils.reverse获取绝对网址,但测试客户端根本不接受此操作。

此问题可能与Django Test Client and Subdomains有关。有人在评论中提到黑客已被用来解决这个问题。请阐明所说的黑客,甚至更好,一个解决这个肯定不那么罕见的用例的正确解决方案。

1 个答案:

答案 0 :(得分:1)

HTTP_HOST = 'rede.example.com'


class TestIndexView(TestCase):

    def setUp(self):
        self.url = subdomain_reverse('network_index', subdomain='rede')

    def test_render(self):
        response = self.client.get(self.url, HTTP_HOST=HTTP_HOST)
        self.assertEqual(response.status_code, 200)