#python #django #django-templates #django-testing
Вопрос:
У меня есть 100 HTML-шаблонов, которые я должен протестировать, и я не знаю, как протестировать каждый отдельный, чтобы убедиться, что они загружаются правильно. Я предполагаю, что я бы использовал цикл for в своем проекте urls.py но когда я это делаю, я получаю следующую ошибку:
Ошибка атрибута: объект ‘URLResolver’ не имеет атрибута ‘имя’
from django.test import SimpleTestCase, TestCase, Client from django.test.utils import setup_test_environment from django.urls import reverse, URLPattern from django.conf import settings import importlib from foo.urls import urlpatterns # Create your tests here. class LoginTest(SimpleTestCase): def login_view_test(self): client = Client() for url in urlpatterns: response = client.get(reverse(url.name)) self.assertEqual(response.status_code, 200) print(str(reverse(url.name)) " Status Code:" str(response.status_code))
По какой-то причине в коде говорится, что у URLResolver нет атрибута имени, я чувствую, что эта ошибка говорит мне, что мне нужно искать в другом месте, чтобы изменить имя, я просто не знаю, где искать.
при удалении .name в обратном теге я получил эту ошибку:
lt;URLResolver lt;модуль «учетная запись.url» из «/home/company/company_project/account/urls.py’gt; (Нет:Нет) ‘учетная запись/’lt;модуль ‘учетная запись.url-адреса’ от ‘/home/company/company_project/account/urls.py’gt;gt;
Ответ №1:
Вам не нужно называть urlpattern
имя.
Например:
... path('someurl/', generic.RedirectView.as_view(url='/anyurl/')), ...
в результате URLPattern
получается без имени
lt;URLPattern 'someurl/'gt; # no name
В вашем случае вы, вероятно, могли бы напрямую использовать сохраненный маршрут:
from django.test import SimpleTestCase, TestCase, Client from django.test.utils import setup_test_environment from django.urls import reverse, URLPattern from django.conf import settings import importlib from foo.urls import urlpatterns # Create your tests here. class LoginTest(SimpleTestCase): def login_view_test(self): client = Client() for urlpattern in urlpatterns: if urlpattern.name is None: continue response = client.get(urlpattern.pattern._route)) self.assertEqual(response.status_code, 200) print(str(reverse(url.name)) " Status Code:" str(response.status_code))
Имейте в виду, что это не работает, если вы передали некоторые параметры, такие как первичные ключи.
Вероятно, это еще не лучшие решения, так как мы используем внутренний атрибут, но это решает вашу проблему
Комментарии:
1. Хорошо, что делать, если я хочу пропустить URL-шаблоны, у которых нет имени.
2. Добавьте
if urlpattern.name is None: continue
-gt; Я обновил ответ![]()
3. @Кейд, это помогло?
4. После запуска этого я также столкнулся с проблемой, что он не просматривает каждый включенный URL-файл, поэтому я взял код из другого сообщения о переполнении стека и объединил его с вашим, чтобы получить тот, который выполнял бы все URL-адреса, даже включенные, но да, ваш код помог!