我有一个单独的settings
文件用于测试环境。我正在使用DRF进行身份验证,但是在rest_framework.permissions.AllowAny
文件中将默认权限设置为test_setting
。现在要测试身份验证是否有效,我需要覆盖密钥。但这似乎不起作用。
我正在使用装饰器@override_settings
。但这似乎不起作用。 如果我直接更改setttings
文件,则测试通过。
@override_settings(REST_FRAMEWORK={
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework.authentication.TokenAuthentication',
),
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.IsAuthenticated',
)
})
class AuthenticationTest(TestCase):
def test_api_should_not_be_hit_without_authorization(self):
response = client.get(reverse('some_api', kwargs={'key': value}))
self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED)
我期望状态码为401,但似乎可以通过,并给我200。
我在测试中粘贴了以下代码,它显示REST FRAMEWORK
实际上已被覆盖,但是测试仍然失败。
from django.conf import settings
dir(settings)
print(settings.REST_FRAMEWORK)
编辑:
这是我得到的答复:
<Response status_code=200, "application/json">
谢谢
答案 0 :(得分:0)
在以经过身份验证的用户测试DRF端点之前,我曾发生过这种情况。如果用户有权访问DRF browseable API视图,则导致401的API请求仍可以在有效的API视图中表示。
尝试将format='json'
添加到client.get()
中,以确保您未点击DRF接口而不是JSON API:
response = client.get(reverse('some_api', kwargs={'key': value}), format='json')
您可以change the default API request format而不是在client.get()
中指定API格式,而是可以在测试设置模块中将其用于所有测试请求:
REST_FRAMEWORK = {
...
'TEST_REQUEST_DEFAULT_FORMAT': 'json'
}