我目前正在编写一些基本测试,以确保中型 Django 应用程序中的页面正确获取和发布。但是,使用 django.test.client.Client 并不会在应该失败的时候可靠地失败。即使我的代码中明显存在错误,它也会返回 302 响应。
在我的应用程序/urls.py 中:
url(r'^mymodel/create/$',
views.MyModelView.as_view(),
name = 'my_model_create'),
然后,为了故意创建 500 响应,我做了以下事情:
class MyModelCreateView(MyModelView, CreateView):
def post(self, request, *args, **kwargs):
print self.hello
self.object = MyModel()
return super(MyModelCreateView, self).post(request, *args, **kwargs)
显然,该视图没有任何名为 hello 的对象。尝试通过浏览器发送请求时,这会按预期失败。
甚至将“print self.hello”替换为
return HttpResponse(status = 500)
然而,我仍然得到以下信息:
#We have a model called Client, so it
#is imported as RequestClient to avoid conflicts
In [1]: from django.test.client import Client as RequestClient
In [2]: client = RequestClient()
In [3]: response = client.post("/app/mymodel/create/")
In [4]: response.status_code
Out[4]: 302
显然,这里的问题在于键盘和椅子之间,因为如果正确完成,Client()/RequestClient() 没有理由不返回 500 错误。当我收到 POST 请求的 302 个响应而不是 200 个响应时,甚至会出现一些问题,但这可能是因为我们使用的是 HttpRedirect。
有谁知道这里可能是什么问题?作为参考,我使用的是 Python 2.7 和 Django 1.5(尽管我可能需要与 Django 1.4 兼容)。