Модульное тестирование с использованием принудительной аутентификации Django Rest Framework

Я создаю RESTful API-сервисы с использованием django rest framework, я дошел до того, что мне пришлось создать автоматический тест для моих RESTful API-сервисов.

Для API sessionList требуется аутентификация токена, если у пользователя нет токена, он не сможет получить доступ к коллекции сеансов.

API работал нормально, когда я тестировал его, используя POSTMAN и настоящий браузер.

SessionList:

class SessionList(generics.ListCreateAPIView):
    authentication_classes = [TokenAuthentication, ]
    permission_classes = [IsAuthenticated, ]
    throttle_scope = 'session'
    throttle_classes = (ScopedRateThrottle,)

    name = 'session-list'

    filter_class = SessionFilter
    serializer_class = SessionSerializer
    ordering_fields = (
        'distance_in_miles',
        'speed'
    )

    def get_queryset(self):
        return Session.objects.filter(owner=self.request.user)

    def perform_create(self, serializer):
        serializer.save(owner=self.request.user)

Затем я создал автоматический тест с использованием теста DRF

RunningSessionTest:

class RunningSessionTest(APITestCase):

    def test_get_sessions(self):
        factory = APIRequestFactory()
        view = views.SessionList.as_view()
        user = User.objects.create_user(
            'user01', 'user01@example.com', 'user01P4ssw0rD')

        request = factory.get('http://localhost:8000/sessions/')
        force_authenticate(request, user=user)
        response = view(request)
        assert Response.status_code == status.HTTP_200_OK

    def test_get_sessions_not_authenticated_user(self):
        factory = APIRequestFactory()
        view = views.SessionList.as_view()
        user = User.objects.create_user(
            'user01', 'user01@example.com', 'user01P4ssw0rD')

        request = factory.get('http://localhost:8000/sessions/')
        response = view(request)
        assert Response.status_code == status.HTTP_401_UNAUTHORIZED

Проблема: в обоих случаях, если у пользователя есть токен или нет, значением ответа является HTTP_200_OK

Я пытался решить эту проблему, пытаясь различными способами реализовать тест. Я использовал APIRequestFactory, также я использовал APIClient, но я получил тот же результат. Честно говоря, после прочтения документа много раз я не мог понять разницу между APIClient и APIRequestFactory.

Результат теста:

Traceback (most recent call last):
  File "C:\python_work\DjnagoREST\01\restful01\RunKeeper\tests.py", line 67, in test_get_sessions_not_authenticated_user
    assert Response.status_code == status.HTTP_401_UNAUTHORIZED
AssertionError

Буду благодарен за вашу помощь.

1 ответ

Решение

Я думаю, вам нужно будет изменить Response.status_code в response.status_code,

Как оказалось, Response.status_code (как и в rest_framework.response.Response) равен 200:D

Другие вопросы по тегам