Как указать заголовки Accept от rest_framework.test.Client? - PullRequest
0 голосов
/ 14 декабря 2018

Я пытаюсь настроить конечную точку API для ответа HTML или JSON в зависимости от заголовков Accept входящего запроса.У меня все работает, тестирование с помощью curl:

> curl --no-proxy localhost -H "Accept: application/json" -X GET http://localhost:8000/feedback/
{"message":"feedback Hello, world!"}

> curl --no-proxy localhost -H "Accept: text/html" -X GET http://localhost:8000/feedback/
<html><body>
<h1>Root</h1>
<h2>feedback Hello, world!</h2>
</body></html>

Я не могу понять, как использовать APITestCase (). Self.client, чтобы указать, какой контент следует принимать.

Мой взгляд выглядит как

class Root(APIView):
    renderer_classes = (TemplateHTMLRenderer,JSONRenderer)
    template_name="feedback/root.html"
    def get(self,request,format=None):
        data={"message": "feedback Hello, world!"}
        return Response(data)

, а мой тестовый код выглядит как

class RootTests(APITestCase):
    def test_can_get_json(self):
        response = self.client.get('/feedback/',format='json',Accept='application/json')
        self.assertEqual(response.status_code, 200)
        self.assertEqual(response.accepted_media_type,'application/json')
        js=response.json()
        self.assertIn('message', js)
        self.assertEqual(js['message'],'feedback Hello, world!')

, который умирает в тесте для response.accepted_media_type.Какой правильный способ сделать это?Все, что я могу найти, говорит, что аргумент формата должен быть достаточным.

1 Ответ

0 голосов
/ 14 декабря 2018

Как правильно было указано здесь , документы, похоже, мало что говорят о том, как добавить заголовки в запрос с помощью тестового клиента.Однако для этого можно использовать параметр extra, но хитрость заключается в том, что вы должны написать его точно так, как выглядит заголовок http.Так что вы должны сделать это:

self.client.get('/feedback/', HTTP_ACCEPT='application/json') 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...