如何在 Django tests.py 文件中的每次测试后重新评估我的 urls.py 文件?

Posted

技术标签:

【中文标题】如何在 Django tests.py 文件中的每次测试后重新评估我的 urls.py 文件?【英文标题】:How do I re-evaluate my urls.py file after every test within a Django tests.py file? 【发布时间】:2017-04-05 12:02:42 【问题描述】:

我的 urls.py 中有以下结构 - 它允许我在开发时直观地检查我在浏览器中发送的电子邮件的格式:

urlpatterns = [Various url pattenrns]

if settings.DEBUG:
    urlpatterns += [URL Pattern for checking emails]

我的问题是,当我运行我的测试套件时,代码只检查一次 settings.DEBUG - 而不是每次测试甚至 TestCase 运行时。

我正在尝试在适用于DEBUG=True urlpattern 的测试之前使用@override_settings 装饰器,例如:

# Most of my tests run fine with Debug=False

@override_settings(DEBUG=True)
# Tests that use the URL pattern for checking emails

但是,我似乎无法在测试之间正确切换 Url 模式...大概是因为我的 urls.py 文件只为整个应用程序的测试加载一次。

有没有办法在我的 urls.py 中使用这种类型的结构并运行我的测试?我是否有理由不应该在我的 urls.py 中使用这种类型的条件?

【问题讨论】:

【参考方案1】:

正如你所说,使用 @override_settings(DEBUG=True) 是行不通的,因为 Django 已经加载了 URL 配置并评估了 settings.DEBUG

另一种方法是创建另一个始终包含调试视图的根 url 配置。

# mysite/debug_urls.py
from django.conf.urls import url
from mysite.urls import urlpatterns as mysite_urlpatterns

urlpatterns = mysite_urlpatterns + [
    url(...),
]

那么,在你的测试中,override the URL config:

@override_settings(ROOT_URLCONF='mysite.debug_urls') 

【讨论】:

添加到这个答案,如果您需要在命名空间下添加这些 url/路径,您可以执行类似 urlpatterns = [ path('',include(([your url list], 'namespace' ))) ]

以上是关于如何在 Django tests.py 文件中的每次测试后重新评估我的 urls.py 文件?的主要内容,如果未能解决你的问题,请参考以下文章

Django(数据查询)

我在哪里必须在Django中放置test _ *。py文件?

我如何告诉 django-nose 我的测试在哪里?

Django的ORM表查询

在 django tests.py 中保存函数引发错误

新的 django 应用程序中没有 admin.py 文件