如何在 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 文件?的主要内容,如果未能解决你的问题,请参考以下文章