我基本上想打开TokenAuthentication,但仅用于2个单元测试。我目前看到的唯一选择是使用@override_settings(...)
替换REST_FRAMEWORK设置值。运行时单元测试Django Rest框架身份验证
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条回应。
如果我在config文件夹的test_settings.py文件中插入相同的字典,一切都按预期工作。然而就像我说过的,我只想打开几个单元测试的认证,而不是全部。我的想法是,Django在初始化之后永远不会重新访问DRF的设置。所以即使设置值是正确的,它们也不会被使用。
有没有人遇到这个问题,并找到了解决办法?或解决方法?
使用提供'从rest_framework.settings导入api_settings'审查源代码会给你一个提示如何覆盖: https://开头github.com/tomchristie/django-rest-framework/blob/master/rest_framework/settings.py – petkostas 2015-03-31 11:47:04
我刚刚发现这个问题,https://github.com/tomchristie/django-rest-framework/issues/2466看起来像我的问题可能还没有解决:/ – 2015-03-31 18:32:21