Протестируйте Несколько HTML-Шаблонов, Чтобы Убедиться, Что Они Возвращают 200

#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-адреса, даже включенные, но да, ваш код помог!