首页 > 解决方案 > 使用 django url 进行视图测试有意义吗?

问题描述

我是 django 的新手,我在一个网站上工作,我想为它编写单元测试,我有点困惑如何去做。从 django 获取 url 并测试他们的观点是否有意义?

from django.test import TestCase
from django.urls import get_resolver


from kernel.settings.base import TEMPLATES_DIR



class ViewTest(TestCase):
    
    Site_urls= list(set(v[1] for k,v in get_resolver().reverse_dict.items()))
    Site_urls= [i.replace('\\','') for i in Site_urls]
    Site_urls= [i.replace('/','') for i in Site_urls]
    Site_urls= [i.replace('$','') for i in Site_urls]

        
    def urlexists(self):
        for i in self.Site_urls:
            with self.subTest(line= i):
                response = self.client.get(f'/{i}/')
                self.assertEqual(response.status_code, 200)

我的网址示例:

urlpatterns = [

    path('about/', aboutView.as_view(),name='About'),

]

还有其他测试,例如视图是否使用获取 url 名称的正确模板...

那么这是正确的做法还是我应该使用静态文件?

标签: pythondjango

解决方案


是的,如果你想检查是否url对应正确view

这是一个例子

url对应右边view

from .views import register_view
from django.urls.base import resolve

class RegisterTests(TestCase):

    def test_register_view(self):

        view = resolve('/account/register')
        self.assertEqual(
            view.func.__name__,
            register_view.__name__,
        )

运行时python manage.py test,如果设置正确的视图,它应该通过。

url对应右边template

使用reverseclient.get访问您的网址。

from django.urls.base import resolve, reverse # <--- new
from .views import register_view

class RegisterTests(TestCase):

    def test_register_view(self):
        ...

    def test_register_template(self):  # <--- new
        
        url = reverse('account:register')
        self.response = self.client.get(url)
        self.assertEqual(self.response.status_code, 200)
        self.assertTemplateUsed(self.response, 'account/register.html')

推荐阅读