Переопределение настроек Django не отражается в тесте - PullRequest
0 голосов
/ 10 апреля 2019

У меня есть отдельный 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">

Спасибо

1 Ответ

0 голосов
/ 10 апреля 2019

У меня такое уже было при тестировании конечных точек DRF как аутентифицированного пользователя.Если у пользователя есть доступ к доступным для просмотра DRF представлениям API , запрос API, вызвавший 401, все еще может быть представлен в действительном представлении API.

Попробуйте добавить format='json' в * 1006.* чтобы убедиться, что вы не используете интерфейс DRF вместо JSON API:

response = client.get(reverse('some_api', kwargs={'key': value}), format='json')

Вместо указания формата API в client.get(), вы можете изменить формат запроса API по умолчанию в модуле настроек теста, поэтому он используется во всех ваших тестовых запросах:

REST_FRAMEWORK = {
    ...
    'TEST_REQUEST_DEFAULT_FORMAT': 'json'
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...