【发布时间】:2017-12-23 16:54:55
【问题描述】:
我在 django 中有一个端点 /docs,我只想在设置中的 DEBUG = True 时可见 - 否则,它应该抛出 404。我的设置看起来像这样
urls.py
urlpatterns = ...
if settings.DEBUG:
urlpatterns += [
url(r'^docs/$', SwaggerSchemaView.as_view(), name='api_docs'),
]
但是,在进行测试时,django 不会自动重新加载urls.py,这意味着简单地将DEBUG 覆盖为True 或False 不起作用。
我的测试看起来像这样
@override_settings(DEBUG=True)
@override_settings(ROOT_URLCONF='config.urls')
class APIDocsTestWithDebug(APITestCase):
# check for 200s
...
@override_settings(DEBUG=False)
@override_settings(ROOT_URLCONF='config.urls')
class APIDocsTestWithoutDebug(APITestCase):
# check for 404s
...
现在是奇怪的部分:当我使用 pytest path/to/test.py::APIDocsTestWithDebug 和 pytest path/to/test.py::APIDocsTestWithoutDebug 单独运行测试时,两个测试都通过了。但是,如果我将测试文件作为一个整体运行 (pytest path/to/test.py),APIDocsTestWithDebug 总是会失败。 它们单独工作但不一起工作的事实告诉我 url 覆盖正在工作,但是当测试串联时,会出现一些将事情搞砸的错误。我想知道是否有人遇到过类似的问题,或者有完全不同的解决方案,或者可以给我一些关于我做错了什么的提示。
【问题讨论】:
-
我不会这么说 - 这个问题是覆盖设置的核心功能的问题 - 我的问题是,虽然我可以覆盖
DEBUG,但我的 url 是基于定义的DEBUG是否为 True。我需要找到一种方法来重新生成 URL 或类似的东西 -
如何在
urls.py中导入设置? -
from django.conf import settings -
我会取下旗帜。你说得对,这是一个不同的问题。
-
您可以尝试使用
include
标签: python django pytest urlconf