Почему мой запрос Django DRF RequestsClient не работает в тестах?

<

Они находятся за аутентифицированной страницей. Я пытаюсь использовать DRF RequestsClient для этого.

Мой код выглядит следующим образом:

from rest_framework.test import APITestCase
from rest_framework.test import RequestsClient
from django.urls import reverse
import requests

URL_PREFIX="http://testserver"
API_TOKEN="tfhgffhgf675h"

class APITests(APITestCase):
    @staticmethod
    def _get_full_url(url, *args, **kwargs):
        return URL_PREFIX + reverse(url, *args, **kwargs)

    def setUp(self):
        self.client = RequestsClient()

    def test_stuff(self):
        url = self._get_full_url("ahs:agena_results-list")

        # Raw requests library - works fine
        # Note: Testing shows that the RequestsClient() seems to do some sort of magic to
        # be able to resolve http://testserver. A raw requests GET request must hit it at
        # 127.0.0.1, and specify the port
        response = requests.get("http://127.0.0.1:8000", headers={"Authorization": f"Token {API_TOKEN}"})

        # RequestsClient() - doesn't work
        response = self.client.get(url, headers={"Authorization": f"Token {API_TOKEN}"})

Мой запрос RequestsClient не работает, но мой необработанный запрос requests работает нормально.

Исключение, возникающее при использовании RequestsClient, довольно загадочно:

Странно то, что если я удалю заголовок Authorization из запроса RequestsClient, он не падает, но возвращает 403, так что это мне не помогает.

Я также пробовал установить заголовок Authorization на RequestsClient таким образом, но это тоже не помогло:

self.client.headers.update({'Authorization': f'Token {API_TOKEN}'})

Есть идеи, что я делаю неправильно?

Использование APILiveServerTestCase вместо APITestCase при использовании RequestsClient решает проблему.

Очевидно, что о плохой документации по этому вопросу было известно уже некоторое время, но, похоже, с тех пор она не улучшилась.

Вернуться на верх