2009-12-21 2 views
4

방법을 수 Jinja2 전원 장고보기를 테스트 할 때 나는 response.context 액세스 :내가 장고 test.client를 사용하고 내가 같은 것을 할 때

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

:

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

를 오류가 발생합니다 내 유일한 추측은 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

'Jim'이 response.context [ 'name'] ' – czarchaic

1

장고의 원숭이 패치render 메서드를 재정의 Template 클래스는 template_rendered 신호를 보내고 response.context을 채울 수 있습니다.

코드를 파헤 치면 Jinja2의 Template 클래스에서이 작업을 수행 할 수 있습니다.

1

나는

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이 밖으로 선택할 수 있습니다 (페이지로드 테스트 파일의 시작에서) @Rho이 방법을 제안 무슨 짓을했는지 이 경우 목록이 아님) response.template[0].name 대신 response.template.name을 사용해야합니다.

+0

인 경우를 제외하고이 테스트가 실패 할 것이라고 생각합니다. 변경 만 : "from jinja2.template import Template"을 "from jinja2 import Template"로 변경해야합니다. @Evgeny에게 감사합니다! –

1

신사가 context_data 변수를 설정하지 컨텍스트 : 오타 잡기위한

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