Тестовый клиент Django: Как удалить заголовки http - PullRequest
4 голосов
/ 03 февраля 2012

Я пытаюсь написать модульный тест для фрагмента кода, который проверяет, отсутствует ли заголовок. Как я могу опустить заголовок http_referer (или любой другой заголовок) в тестовом клиенте Django?

def testCase(self):
    response = self.client.get('/some_url/')
    self.assertNotEqual(500, response.status_code)

Ответы [ 2 ]

3 голосов
/ 04 февраля 2012

Вместо использования встроенного тестового клиента вы можете использовать RequestFactory Django для построения вашего запроса, а затем изменить объект запроса перед вызовом вашей функции:

from django.test.client import RequestFactory
from django.test import TestCase

from yourapp.view import yourfunction

class YourTest(TestCase)
    def setUp(self):
        self.factory = RequestFactory()

    def testCase(self):
        request = self.factory.get('/yoururl/')
        del request.META['HTTP_REFERER']
        yourfunction(request)
0 голосов
/ 04 февраля 2012

Не проходите тестовый клиент, в этом случае.Если вы измените поведение тестового клиента, а затем сделаете запрос через него, вы не тестируете свой код на основе входных данных, которые ему фактически придется обработать.

Вы не должны доверять тестовому клиенту для создания HTTP-запросов точно так же, как клиент WSGI.Он выполняет достаточно хорошую работу, чтобы получить параметры запроса в вашем представлении, но он, конечно, отличается от того, что вы получили бы от реального запроса.

Цель тестового клиента - защитить вас отвсе беспорядочные детали реальных объектов запроса и ответа, и просто позволяют вам проверить, как ваши представления реагируют на входные параметры.В вашем случае, однако, вам нужно проверить эти детали.

Вы должны создать объект HTTPRequest так же, как это сделал бы Django - использовать столько функций Django, сколько вам нужно для его построения, а затем вызвать вашview, или ваше промежуточное ПО, напрямую с этим объектом HTTPRequest.Если ваше представление должно вызывать исключение, используйте assertRaises для его проверки.Если он должен вернуть HTTPResponse с кодом состояния, установленным в 500, то проверьте это - или протестируйте их вместе с пользовательским методом assert, если вам нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...