Имеет ли смысл использовать django urls для view test?

Я новичок в django, работаю над сайтом и хочу написать для него модульные тесты, и я немного запутался, как это сделать. Имеет ли смысл получать url из самого django и тестировать их представления?

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)

примеры моих url:

urlpatterns = [

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

]

также другие тесты, например, использует ли представление правильный шаблон, который получает имена url...

так это правильный способ или мне следует использовать статические файлы?

Да, если вы хотите проверить, соответствуют ли 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

используйте reverse и client.get для посещения вашего url.

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')
Вернуться на верх