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

时间:2016-11-21 23:21:00

标签: django django-urls django-testing django-settings

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

urlpatterns = [Various url pattenrns]

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

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

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

# 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 个答案:

答案 0 :(得分:2)

正如你所说,使用@override_settings(DEBUG=True)将无效,因为Django已经加载了URL配置并评估了settings.DEBUG

另一种方法是创建始终包含调试视图的anotherroot 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')