Django:测试LoginView抛出断言错误



Quesiton我正在为登录过程构建一个测试套件,但立即遇到了问题。我认为问题在于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')
]

测试.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测试)

断言错误:<函数LoginView位于0x7f970ca05320>!=<类"django.contrib.auth.views.LoginView">

这是因为您没有返回LoginView类的实例,而是通过as_view()入口点方法获得适当的方法

您可以通过属性view_class访问类,该属性在as_view()方法中设置为文档

返回的视图具有view_class和view_initkwargs属性。

解决方案

self.assertEquals(resolve(url).func.view_class, LoginView)

请参阅:django如何断言url模式解析为正确的基于类的视图函数

最新更新