Почему мой запрос 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
решает проблему.
Очевидно, что о плохой документации по этому вопросу было известно уже некоторое время, но, похоже, с тех пор она не улучшилась.