gpt4 book ai didi

django - 使用多主机中间件测试 django 页面

转载 作者:行者123 更新时间:2023-12-04 16:56:16 26 4
gpt4 key购买 nike

背景:我正在使用中间件 django-multihost (http://effbot.org/zone/django-multihost.htm) 允许我的单个 django 应用程序响应来自同一项目的不同主机名。中间件更改了 ROOT_URLCONF (即哪个 urls.py 文件)基于 Host: HTTP 请求 header 。

这很好用,但我想编写一些简单的集成测试来检查页面是否正确加载。这是一个基本测试的示例,用于检查 /trends页面加载,并且上面有文本“今日趋势”:

def test_homepage_loads(self):
client = Client()
client.login(username = 'testing', password = 'testing')
page = client.get("/trends", follow = follow_redirects)
self.assertEquals(page.status_code, 200)
self.assertTrue( page.content.find('Trends for Today') > 0 )

问题是,这总是使用默认的 ROOT_URLCONF 加载,而不是中间件会调用的那个。如果我像 client.get("http://secondarysite/trends") 那样明确地将主机名放入 url 中没有关系.

如何使用 django 测试客户端在其他虚拟站点上进行测试?我想在测试中调用中间件,以便我可以测试该逻辑。但是如果我需要,我会在测试期间做一些像 set ROOT_URLCONF 这样的事情,但我不知道该怎么做。

最佳答案

使用 Django 客户端,您可以像这样设置 HTTP header :

client.get(url, HTTP_HOST = 'my.host.com')

基本上是 get函数采用参数字典,它将用作 HTTP header 。为了坚持 DRY,你可以在 setup() 中做这样的事情单元测试类:
self.request_headers = { 'HTTP_HOST': 'foo' }

在你的测试方法中:
client.get(url, **self.request_headers)

注意:我不确定这是否适用于您的问题。然而,这是我能想到的设置标题的唯一方法。

我能想到的另一个解决方案是在您的测试类上设置 URLConf,如下所示:
class Mytest(TestCase):
urls = 'my.urlconf'

然而,这不会测试中间件。

关于django - 使用多主机中间件测试 django 页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4137488/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com