2009-12-19 5 views
7

ipython의 HttpResponse 개체의 context 특성에 액세스 할 수 없습니다. 그러나 단위 테스트는 context에 액세스합니다.Django : 테스트 클라이언트의 컨텍스트가 셸에서 비어 있습니다.

다음은 단위 테스트입니다. 테스트 실행이 제대로 전달 : 여기

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') 

내가 쉘에서 사용되는 코드입니다 : response.context는 단위 테스트에 존재하는 반면

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는 셸에서 none입니다.

HttpResponse이 쉘과 유닛 테스트 사이에서 일관되게 작동하지 않는 이유는 무엇입니까?

+0

나는 이것을 직접 시도하고 컨텍스트도 템플릿도 장고 껍질에 설정되어 있지 않다. 클라이언트가 대화 형 셸에서 사용되도록 의도되지 않은 것 같습니다. 테스트 주자는 테스트를 실행하기 전에 계기를 만들어 쉘을 통해 트리거되지 않습니다. 'django.test.testcases'를보세요. – muhuk

답변

6

make template rendering send a signal에 특수 계측에서 monkeypatches가있는 장고 테스트 코드를 볼 수 있습니다. test client listens to이므로 annotate the response object with the rendered templates and their contexts이 될 수 있습니다.

이 신호를 첨부하려면 셸 세션 (다른 부작용이 있음)에서 django.test.utils.setup_test_environment() 함수를 호출하거나 monkeypatch 템플릿 렌더링이되는 행을 복제해야합니다 . 너무 어렵지는 않지만이 특정 디버깅 측면을 테스트 밖에서 사용하기 쉽게 리팩토링 할 수 있다면 좋을 것 같습니다. 개인적으로 DEBUG가 True 일 때 항상이 정보가 수집되었는지 여부는 신경 쓰지 않습니다.

관련 문제