Как получить доступ к response.context при тестировании представления Django на основе Jinja2 - PullRequest
4 голосов
/ 21 декабря 2009

Когда я использую test.client Django, я делаю что-то вроде:

class MyTestCase(TestCase):
    def test_this(self):
        c = self.client
        response = c.get('/')
        assert False, response.context['name']

Я получаю сообщение об ошибке:

assert False, response.context['name']
TypeError: 'NoneType' object is unsubscriptable

Мое единственное предположение, что использование Jinja2 препятствует отображению контекста при тестировании.

Обратите внимание, что этот тест специально настроен на неудачу.

Ответы [ 4 ]

1 голос
/ 31 декабря 2015

Джинджа устанавливает переменную context_data, а не context:

response = client.get('/')
print response.context_data
1 голос
/ 18 августа 2010

Django патчи обезьян класс Template, переопределяющий метод render, чтобы иметь возможность отправлять сигнал template_rendered и заполнять response.context.

Если вы выкопаете код, вы сможете сделать это для класса Template Jinja2.

1 голос
/ 30 сентября 2010

Я сделал то, что @Rho предложил таким образом (в начале файла тестов загрузки страницы)

from jinja2 import Template as Jinja2Template
from django.test import signals

#note - this code can be run only once
ORIGINAL_JINJA2_RENDERER = Jinja2Template.render
def instrumented_render(template_object, *args, **kwargs):
    context = dict(*args, **kwargs)
    signals.template_rendered.send(
                            sender=template_object,
                            template=template_object,
                            context=context
                        )
    return ORIGINAL_JINJA2_RENDERER(template_object, *args, **kwargs)
Jinja2Template.render = instrumented_render

Затем вы можете выбрать контекст ответа и имя шаблона (однако response.template в данном случае не является списком), и вместо response.template[0].name вам нужно будет использовать response.template.name.

1 голос
/ 22 декабря 2009

Я хотел прочитать о TestCase. После просмотра документов, похоже, у вас может быть ошибка. Утверждения являются методами класса TestCase.

class MyTestCase(TestCase):
  def test_this(self):
    response=self.client.get('/')
    self.assertEquals(response.context['name'],'Jim') 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...