我基本上想打开 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 的设置。因此,即使设置值正确,它们也不会被使用。
有没有人遇到这个问题并找到了解决方案?或解决方法?