测试多个 HTML 模板以确保它们 Return 200

Test Multiple HTML Templates To Make Sure They Return 200

我有 100 个 HTML 模板需要测试,但不知道如何测试每个模板以确保它们正确加载。我假设我会在我的项目 urls.py 中使用 for 循环,但是当我这样做时,我收到以下错误:

AttributeError: 'URLResolver' object has no attribute '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 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 时,出现此错误:

<URLResolver <module 'account.urls' from '/home/company/company_project/account/urls.py'> (None:None) 'account/'>

您不必为 urlpattern 命名。

例如:

...
path('someurl/', generic.RedirectView.as_view(url='/anyurl/')),
...

结果 URLPattern 没有名字

<URLPattern 'someurl/'>  # 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))

请注意,如果您传递了一些参数,如主键,这将不起作用。

可能还不是最好的解决方案,因为我们使用的是内部属性,但它可以解决您的问题:-)