在Django测试用例中,如何从HttpResponse
对象获取网址?
如果我有以下Django应用程序:
from django.urls import path
from . import views
urlpatterns = [
path('httpresponse/', views.http_response, name='http_response'),
]
from django.shortcuts import render
def http_response(request):
return render(request, template_name='home.html')
from django.test import TestCase
from django.urls import reverse
http_response = reverse('http_response')
class TestTemplateResponse(TestCase):
def test_http_response(self):
response = self.client.get(http_response)
self.assertEqual(response.url, http_response)
单元测试失败,并显示以下消息:
AttributeError: 'HttpResponse' object has no attribute 'url'
。
有什么方法可以使客户端返回Response
对象而不是HttpResponse
吗?
答案 0 :(得分:0)
从上面给出的代码和您的注释中可以看出,如果用户通过身份验证,则尝试将用户重定向到主页不匹配。在上面的代码中,如果有人正在访问/httpresponse
,那么您只是在渲染一个模板(返回HttpResponse
)。
HttpResponse
对象没有url
属性。现在,如果您将login_required
装饰器用于已编写的视图,它将把unauthenticated
用户重定向到登录页面。在这种情况下,redirect
将返回一个确实具有HttpResponseRedirect
属性的url
实例。
因此,要测试在访问singup时是否将经过身份验证的用户重定向到主页视图,您应该首先为经过身份验证的用户设置重定向。然后,您应该能够访问响应的url
属性。