2009-12-19 11 views
7

से खाली है, मैं HttpResponse ऑब्जेक्टन से ऑब्जेक्ट का उपयोग नहीं कर सकता। लेकिन इकाई परीक्षण 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') 

यहाँ कोड है कि मैं खोल में प्रयोग किया जाता है:

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 शैल और यूनिट परीक्षण के बीच असंगत व्यवहार क्यों करता है?

+0

मैंने यह कोशिश की और न तो संदर्भ और न ही टेम्पलेट Django खोल में सेट है। मुझे लगता है कि क्लाइंट का उद्देश्य इंटरेक्टिव शैल में नहीं किया जाना है। परीक्षण धावक परीक्षण चलाने से पहले कुछ उपकरण बनाता है, जो खोल के माध्यम से ट्रिगर नहीं किया जाएगा। 'Django.test.testcases' देखें – muhuk

उत्तर

6

आप Django परीक्षण कोड में देख सकते हैं, जहां यह 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() फ़ंक्शन को कॉल करना होगा, या केवल उन पंक्तियों को डुप्लिकेट करें जो बंदर टेम्पलेट प्रतिपादन करते हैं । बहुत मुश्किल नहीं है, लेकिन मैं मानता हूं कि यह अच्छा होगा अगर इस विशेष डीबगिंग पहलू को परीक्षण के बाहर उपयोग करना आसान बनाने के लिए दोबारा इस्तेमाल किया जा सके। व्यक्तिगत रूप से मुझे कोई फर्क नहीं पड़ता कि यह जानकारी हमेशा डीईयूयूजी सच होने पर ही एकत्र की जाती है, न केवल परीक्षण के तहत।

संबंधित मुद्दे