Django测试:URL映射到基于类的视图

问题描述 投票:0回答:3

我是Django测试的新手,因此请尝试基本的测试代码。但是它在第二个测试类中显示一个错误

Tests.py

from django.test import TestCase,Client
from .views import PostList
from django.urls import resolve


class SmokeTest2(TestCase):
    def test_math(self):
        self.assertEqual(1+1,2)

class HomePageTest(TestCase):
    def test_root_url_resolves_to_home_page_view(self):
        found = resolve('/')
        print({'found':found})
        self.assertEqual(found.func(), PostList)

views.py

class PostList(ListView):
    model = Post
    template_name = 'home.html'

urls.py

urlpatterns = [
    path('',views.PostList.as_view(),name ='list'),
]

当我正在打印found时显示o / p

{'found': ResolverMatch(func=blog.views.PostList, args=(), kwargs={}, url_name=list, app_names=[], namespaces=[])}

但仍然出现此错误

(blog_env) PS D:\django\blog_env\mysite> python manage.py test
D:\django\blog_env\mysite
Creating test database for alias 'default'...
System check identified no issues (0 silenced).
{'found': ResolverMatch(func=blog.views.PostList, args=(), kwargs={}, url_name=list, app_names=[], namespaces=[])}
E.
======================================================================
ERROR: test_root_url_resolves_to_home_page_view (blog.tests.HomePageTest)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "D:\django\blog_env\mysite\blog\tests.py", line 19, in test_root_url_resolves_to_home_page_view
    self.assertEqual(found.func(), PostList)
TypeError: view() missing 1 required positional argument: 'request'

----------------------------------------------------------------------
Ran 2 tests in 0.069s

FAILED (errors=1)
Destroying test database for alias 'default'... 
django django-testing
3个回答
0
投票
进一步了解Django Test Client

Update-1


0
投票

我刚才被这个问题困扰,最终在documentation中找到了解决方案

基于类的视图需要按名称进行比较,由于不同的对象ID,as_view()生成的函数将不相等,因此断言应如下所示:
from django.test import TestCase from django.urls import resolve from .views import HomePageView class HomePageViewViewTest(TestCase): def test_resolve_to_home_page_view(self): resolver = resolve('/') self.assertEqual(resolver.func.__name__, HomePageView.as_view().__name__)

0
投票
© www.soinside.com 2019 - 2024. All rights reserved.