Почему тестовый клиент django выбрасывает мои дополнительные заголовки

#python-3.x #django #django-rest-framework #django-testing

Вопрос:

Я пытаюсь протестировать представление, в котором используются некоторые заголовки. В моем тестовом коде у меня есть что-то вроде этого:

 headers = {'X-Github-Event': 'pull_request'}
body = {useful stuff}
url = reverse(my_view) 
 

Я пробовал делать запросы к своему представлению, используя все возможные комбинации следующих клиентов и отправляя вызовы:

 client = Client(extra=headers)        
client = APIClient(headers=headers)
client = APIClient(extra=headers)

response = client.post(url, data=body, format="json", headers=headers)
response = client.post(url, data=body, format="json", extra=headers)
 

Мой взгляд на самом деле выглядит так:

 @api_view(["POST", "GET"])
def github_webhook(request):
    print(request.headers)
 

Мой X-Github-Event заголовок никогда не распечатывается моим представлением, когда он вызывается из моего тестового кода.

Если я запущу runserver и отправлю запрос на эту конечную точку, то заголовки будут работать идеально. Это просто сломанный тестовый код.

Что я здесь упускаю? Как я могу установить заголовки для своих тестов?

Ответ №1:

Я думаю, что следующий фрагмент поможет вам:

 import json
from django.test import TestCase
from rest_framework.test import APIClient


class FooTestCase(TestCase):

    def setUpTestData(cls):
        cls.client = APIClient(ACCEPT='application/json')

    def test_foo(self):
        headers = {"ACCEPT": "application/json", 'HTTP_X_GITHUB_EVENT': 'pull_request'}
        url = reverse(my_view)
        payload = json.dumps(body)
        response = self.client.post(url, data=payload, content_type='application/json', **headers)