Django:如何测试自定义请求属性?

时间:2012-04-18 00:47:31

标签: django

我有一个django应用程序,它使用自定义中间件模块在所有请求中创建子域属性。为此属性分配了一个字符串。一切都在系统测试期间有效,但我想对此属性运行自动化测试,所以我的问题是:

当我在单元测试期间生成请求时,如何将request.subdomain设置为字符串值,以便我可以测试代码?我是否需要创建自定义请求,然后将其提供给测试客户端?谢谢你的时间。

下面的解决方案

自定义中间件读取HTTP_HOST字符串并将子域保存在属性request.subdomain中。我的问题是如何在单元测试期间将子域请求喷入客户端。方法如下:

测试客户端对象允许您在request.META字典中预设任何键:值对。如果要将主机名设置为子域,则在运行测试时,请执行以下操作:

host = 'subdomain1.test.com:8000' 
c = Client(HTTP_HOST=host)
response = c.get(path='/home')

测试将像在浏览器中输入subdomain1.test.com:8000/home一样执行。

1 个答案:

答案 0 :(得分:1)

所有中间件在测试期间都能正常工作。因此,您可以测试整个视图(并检查它是否返回特定于您的请求的内容) - 它是功能测试。或者您可以创建一个MockRequest并将其直接传递给您的中间件process_request - 这是单元测试。实际上,我会完全使用它们。