Имеет ли смысл использовать 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')