2009-12-21 1 views
4

Когда я использую test.client Django, и я делаю что-то вроде:Как я могу получить доступ к response.context при тестировании Jinja2 питанием вида 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 препятствует появлению контекста при проверке.

Обратите внимание, что этот тест намеренно сфальсифицирован для отказа.

ответ

1

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

class MyTestCase(TestCase): 
    def test_this(self): 
    response=self.client.get('/') 
    self.assertEquals(response.context['name'],'Jim') 
+0

Спасибо за опечатку уловом, я имел в виду утверждают ЛОЖЬ, response.context [ «имя»] Я хочу испытание на неудачу, потому что я хочу посмотреть, что находится в response.context ['name'] –

+0

Я бы подумал, что этот тест потерпит неудачу, если только «Джим» не является «response.context ['name']' – czarchaic

1

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

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

1

Я сделал то, что @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.

+0

Это было сделано! Только изменение: «from jinja2.template import Template» следует изменить на «из шаблона импорта jinja2». Спасибо @Evgeny! –

1

Дзиндзя устанавливает context_data переменную, а не контекст:

response = client.get('/') 
print response.context_data 

 Смежные вопросы

  • Нет связанных вопросов^_^