【问题标题】:Test Multiple HTML Templates To Make Sure They Return 200测试多个 HTML 模板以确保它们返回 200
【发布时间】:2021-12-11 06:32:45
【问题描述】:

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

AttributeError: 'URLResolver' 对象没有属性 '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 时,出现此错误:

(None:None) 'account/'>

【问题讨论】:

    标签: python django django-templates django-testing


    【解决方案1】:

    您不必为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))
    
    

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

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

    【讨论】:

    • 好吧,如果我想跳过没有名字的 urlpatterns 怎么办。
    • 添加if urlpattern.name is None: continue -> 我更新了答案:-)
    • @Cade 有帮助吗?
    • 在运行这个之后,我也遇到了它没有通过每个包含的 url 文件的问题,所以我从另一个 Stack Overflow 帖子中获取了代码,并将它与你的代码结合起来,得到一个可以完成所有urls 甚至包括那些,但是你的代码确实有帮助!
    猜你喜欢
    • 2016-01-25
    • 2019-06-22
    • 1970-01-01
    • 2021-09-02
    • 2021-06-07
    • 1970-01-01
    • 1970-01-01
    • 2022-01-07
    • 2013-10-11
    相关资源
    最近更新 更多