问题描述
问题 我正在为我的登录过程构建一个测试套件,并立即遇到了问题。我认为问题在于 LoginView 是一个“类”,而代码将它作为一个函数进行测试。断言 URL 解析为 LoginView 的正确方法是什么?
urls.py
from . import views
from users.views import *
from django.urls import path
from django.contrib.auth.views import LoginView,logoutView
from users.forms import LoginForm
urlpatterns = [
path('',views.user_home_view,name='user_home'),path('sign_up',views.SignUpView.as_view()),path('login',LoginView.as_view(authentication_form=LoginForm),name='login'),path('logout',logoutView.as_view(),name='logout')
]
tests.py
from django.test import SimpleTestCase
from django.urls import reverse,resolve
from django.contrib.auth.views import LoginView,logoutView
from users.forms import LoginForm
from users.views import *
# Create your tests here.
class UrlTestCase(SimpleTestCase):
def test_login_url_resolved(self):
url = reverse('login')
self.assertEquals(resolve(url).func,LoginView)
测试结果(./manage.py test)
断言错误:
解决方法
解决方案
self.assertEquals(resolve(url).func.view_class,LoginView)
看到这个:django how to assert url pattern resolves to correct class based view function
,这是因为您没有通过 LoginView
入口点方法取回 as_view()
类的实例而是适当的方法
您可以通过属性 view_class
访问类,该属性在 as_view()
方法中设置为 documented
返回的视图具有 view_class 和 view_initkwargs 属性。