2009-11-06 13 views
28

मैं एक Django अनुप्रयोग में टेम्पलेट टैग का एक सेट जोड़ रहा हूं और मुझे यकीन नहीं है कि उनका परीक्षण कैसे करें। मैंने उन्हें अपने टेम्पलेट्स में इस्तेमाल किया है और वे काम कर रहे हैं लेकिन मैं कुछ और औपचारिक खोज रहा था। मुख्य तर्क मॉडल/मॉडल प्रबंधकों में किया जाता है और इसका परीक्षण किया गया है। टैग बस डेटा पुनः प्राप्त है और यहDjango में कस्टम टेम्पलेट टैग का परीक्षण कैसे करें?

{% views_for_object widget as views %} 
""" 
Retrieves the number of views and stores them in a context variable. 
""" 
# or 
{% most_viewed_for_model main.model_name as viewed_models %} 
""" 
Retrieves the ViewTrackers for the most viewed instances of the given model. 
""" 

तो मेरे सवाल का आप आमतौर पर अपने टेम्पलेट टैग का परीक्षण करते हैं और यदि आप ऐसा आप इसे कैसे करते हो है के रूप में एक संदर्भ चर ऐसे में स्टोर?

उत्तर

30

यह मेरा परीक्षण फ़ाइलें, जहां testcase में एक साधारण सहायक विधि self.render_template में से एक की एक छोटी मार्ग है:

rendered = self.render_template(
     '{% load templatequery %}' 
     '{% displayquery django_templatequery.KeyValue all() with "list.html" %}' 
    ) 
    self.assertEqual(rendered,"foo=0\nbar=50\nspam=100\negg=200\n") 

    self.assertRaises(
     template.TemplateSyntaxError, 
     self.render_template, 
     '{% load templatequery %}' 
     '{% displayquery django_templatequery.KeyValue all() notwith "list.html" %}' 
    ) 

यह बहुत बुनियादी है और ब्लैकबॉक्स परीक्षण का उपयोग करता है। यह सिर्फ टेम्पलेट स्रोत के रूप में एक स्ट्रिंग लेता है, इसे प्रस्तुत करता है और जांच करता है कि आउटपुट अपेक्षित स्ट्रिंग के बराबर है या नहीं।

render_template विधि काफी साधारण है:

from django.template import Context, Template 

class MyTest(TestCase): 
    def render_template(self, string, context=None): 
     context = context or {} 
     context = Context(context) 
     return Template(string).render(context) 
+0

एक पुन: प्रयोज्य ऐप के लिए, आप एक परियोजना के दायरे के बाहर यह कैसे परीक्षण करते हैं? एक टेम्पलेट स्ट्रिंग को प्रस्तुत करना जिसमें '{% load custom_tag%}' शामिल है, कम से कम अतिरिक्त काम के बिना काम नहीं कर रहा है? – Santa

+2

ने अपना खुद का प्रश्न उत्तर दिया: 'register = template.Library() का उपयोग करें; टेम्पलेट। पुस्तकालय ['django.templatetags.mytest'] = रजिस्टर; register.tag (name = 'custom_tag', compile_function = custom_tag) '। – Santa

+2

आपके कोड नमूने में 'self' क्या है? 'मेरा टेस्टकेस' ऑब्जेक्ट में 'render_template' विधि नहीं है –

0

स्ट्रिंग्स को टेम्पलेट्स के रूप में प्रस्तुत किया जा सकता है, ताकि आप एक टेस्ट लिख सकें जिसमें एक स्ट्रिंग के रूप में आपके टेम्पलेटेटैग का उपयोग करके एक सरल 'टेम्पलेट' शामिल हो और केवल सुनिश्चित करें कि यह एक निश्चित संदर्भ के साथ सही ढंग से प्रस्तुत करता है।

+0

ये टैग केवल एक खाली स्ट्रिंग प्रस्तुत करना है और इसके बजाय संदर्भ बदल लेकिन मैं परीक्षण करने के लिए सक्षम होना चाहिए इसके लिए भी। –

0

जब मैं अपने टेम्पलेट टैग का परीक्षण कर रहा था, तो मेरे पास टैग, स्वयं, एक स्ट्रिंग लौटाएगा जिसमें पाठ या निर्देश था जिसमें मैं काम कर रहा था ... अन्य सुझावों के साथ-साथ।

चूंकि टैग संदर्भ को संशोधित कर सकते हैं और/या एक स्ट्रिंग को प्रस्तुत करने के लिए वापस कर सकते हैं - मैंने पाया कि यह प्रस्तुत स्ट्रिंग को देखने के लिए सबसे तेज़ था।

बजाय

:

return '' 

यह है:

return str(my_data_that_I_am_testing) 

जब तक आप खुश हैं।

17

आप लोगों ने मुझे सही रास्ते पर ले लिया। ऐसा नहीं है कि संदर्भ सही ढंग से करने के बाद बदल गया था जांच करने के लिए संभव है प्रस्तुत करना:

class TemplateTagsTestCase(unittest.TestCase):   
    def setUp(self):  
     self.obj = TestObject.objects.create(title='Obj a') 

    def testViewsForOjbect(self): 
     ViewTracker.add_view_for(self.obj) 
     t = Template('{% load my_tags %}{% views_for_object obj as views %}') 
     c = Context({"obj": self.obj}) 
     t.render(c) 
     self.assertEqual(c['views'], 1) 
8

कैसे टेम्पलेट टैग का परीक्षण करना का एक अच्छा उदाहरण test of flatpage templatetags

+0

लिंक टूटा हुआ है! – mher

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