2010-12-15 4 views
0

Я получил эту функцию:Как проверить эту функцию, которая использует get_template без предоставления шаблона?

def _render(object, template, context_name=None, classes=None): 
""" 
Helper function that execute the form/field actual rendering. 

""" 
if not context_name: 
    context_name = 'object' 
template = get_template(template) 
c = { 
    context_name: object, 
    'classes': classes, 
} 
return template.render(Context(c)) 

Я хочу, чтобы проверить это, но я не хочу, чтобы обеспечить любой существующий шаблон в моей файловой системе просто «виртуальный» один, как есть. input_chunk:

class RenderCustomChunk(TestCase): 
""" 
The ``_render()`` class should return a fully rendered html code 
based on the given template chunk and parameters passed 
with the rendering function ie. classes. 

""" 
def setUp(self): 
    self.test_object = 'Test Object' 
    self.test_template_name = 'TestTemplate.html' 

    self.input_chunk = u'<p>{{ object }}</p>' 
    self.render_output = u'<p>%s</p>' % self.test_object 

def test_should_render_custom_object(self): 
    self.assertEqual(forms._render(self.test_object, self.test_template_name), 
        self.render_output) 

Есть ли элегантный способ сделать это?

ответ

0

Поскольку я не думаю, что вы пытаетесь проверить функцию get_template (в конце концов, вы используете «виртуальный» файл, а это не то, для чего используется get_template), другим решением является mock get_template.

# tests.py 
from foo import forms 

def mock_get_template(): 
    return django.template.Template(u'<p>{{ object }}</p>') 

forms.get_template = mock_get_template 

или рядный, если он выглядит чище в нАлАдкА()

class RenderCustomChunk(TestCase): 
    def setUp(self): 
     self.test_object = 'Test Object' 
     self.test_template_name = 'TestTemplate.html' 

     self.render_output = u'<p>%s</p>' % self.test_object 

     # this is a unit test for _render, not get_template. 
     forms.get_template = lambda x: Template(u'<p>{{ object }}</p>') 

    def test_should_render_custom_object(self): 
     self.assertEqual(forms._render(self.test_object, self.test_template_name), 
         self.render_output) 
+0

, что будет просто нажать на себя ответственность и до сих пор я не буду в состоянии проверить использование функции с шаблоном пути вместо экземпляра шаблона, поэтому «нет» для этого решения. Я думал о многих решениях, включая удаление get_template с этого помощника. Но я ищу элегантный, может быть, смешной вопрос - вот почему я поставил вопрос - я не ищу здесь простого материала;) – bx2 2010-12-15 19:06:12