【发布时间】:2015-06-04 16:45:27
【问题描述】:
我基本上想打开 TokenAuthentication 但仅用于 2 个单元测试。到目前为止,我看到的唯一选择是使用 @override_settings(...) 替换 REST_FRAMEWORK 设置值。
REST_FRAMEWORK_OVERRIDE={
'PAGINATE_BY': 20,
'TEST_REQUEST_DEFAULT_FORMAT': 'json',
'DEFAULT_RENDERER_CLASSES': (
'rest_framework.renderers.JSONRenderer',
'rest_framework_csv.renderers.CSVRenderer',
),
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework.authentication.TokenAuthentication',
),
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.IsAuthenticated',
),
}
@override_settings(REST_FRAMEWORK=REST_FRAMEWORK_OVERRIDE)
def test_something(self):
这行不通。我可以在装饰器之前和之后打印设置,并看到值发生了变化,但 django 似乎并不尊重它们。它允许使用测试客户端或 DRF APIClient 对象发送的所有请求无需身份验证即可通过。当我预计 401 未授权时,我收到了 200 条回复。
如果我将同一个字典插入到配置文件夹中的 test_settings.py 文件中,一切都会按预期工作。但是就像我说的,我只想为几个单元测试打开身份验证,而不是全部。我的想法是 Django 在初始化后从不重新访问 DRF 的设置。因此,即使设置值正确,它们也不会被使用。
有没有人遇到过这个问题并找到了解决方案?或解决方法?
【问题讨论】:
-
使用提供的
from rest_framework.settings import api_settings查看源代码会给你一个提示如何覆盖:github.com/tomchristie/django-rest-framework/blob/master/… -
我刚刚发现了这个未解决的问题,github.com/tomchristie/django-rest-framework/issues/2466 看起来我的问题可能还没有解决:/
标签: django unit-testing django-rest-framework django-settings http-token-authentication