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

How do I re-evaluate my urls.py file after every test within a Django tests.py file?

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

urlpatterns = [Various url pattenrns]

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

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

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

# 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 中使用这种类型的条件吗?

正如你所说,使用 @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')