Django: тестовый контекст клиента пуст от оболочки - PullRequest
7 голосов
/ 19 декабря 2009

Я не могу получить доступ к атрибуту context объекта HttpResponse из ipython. Но юнит тестовый доступ context.

Вот модульный тест. Тестовый прогон проходит правильно:

from django.test import Client, TestCase
from django.core import mail

class ClientTest(TestCase):
    def test_get_view(self):
        data = {'var': u'\xf2'}
        response = self.client.get('/test04/', data)

        # Check some response details
        self.assertContains(response, 'This is a test')
        self.assertEqual(response.context['var'], u'\xf2')

Вот код, который я использовал в оболочке:

In [10]: from django.test import Client

In [11]: c = Client()

In [12]: r = c.get('/test04/', data)

In [13]: r.context

In [14]: type(r.context)
Out[14]: <type 'NoneType'>

response.context отсутствует в оболочке, тогда как response.context существует в модульном тесте.

Почему HttpResponse ведет себя непоследовательно между оболочкой и модульным тестом?

1 Ответ

8 голосов
/ 19 декабря 2009

Вы можете увидеть в тестовом коде Django, где он монтирует специальные инструменты на , чтобы рендеринг шаблона посылал сигнал , который тестовый клиент прослушивает , поэтому он может аннотировать объект ответа с отображаемыми шаблонами и их контекстами .

Для того, чтобы этот сигнал был присоединен, вы должны либо вызвать функцию django.test.utils.setup_test_environment () в сеансе оболочки (которая имеет другие побочные эффекты), либо дублировать только те строки, которые отрисовывает шаблон обезьяньего патча. Не слишком сложно, но я согласен, что было бы неплохо, если бы этот конкретный аспект отладки мог быть переработан, чтобы его было легче использовать вне тестов. Лично я бы не возражал, если бы эта информация всегда собиралась, когда DEBUG - это True, а не только в процессе тестирования.

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