Тестирование пользовательского фильтра шаблонов Django - PullRequest
17 голосов
/ 21 декабря 2010

У меня есть пользовательский шаблонный фильтр, который я создал в project/app/templatetags.

Я хочу добавить некоторые регрессионные тесты для некоторых ошибок, которые я только что нашел.Как бы я поступил так?

Ответы [ 2 ]

16 голосов
/ 21 декабря 2010

Самый простой способ проверить фильтр шаблона - это проверить его как обычную функцию.

Декоратор

@register.filter не наносит вреда базовой функции, вы можете импортировать фильтр и использовать его, как если бы он не был оформлен. Этот подход полезен для тестирования логики фильтра.

Если вы хотите написать больше тестов в стиле интеграции, вам следует создать экземпляр шаблона django и проверить правильность вывода (как показано в ответе Габриэля).

15 голосов
/ 21 декабря 2010

Вот как я это делаю (извлечено из моего django-multiforloop ):

from django.test import TestCase
from django.template import Context, Template

class TagTests(TestCase):
    def tag_test(self, template, context, output):
        t = Template('{% load multifor %}'+template)
        c = Context(context)
        self.assertEqual(t.render(c), output)
    def test_for_tag_multi(self):
        template = "{% for x in x_list; y in y_list %}{{ x }}:{{ y }}/{% endfor %}"
        context = {"x_list": ('one', 1, 'carrot'), "y_list": ('two', 2, 'orange')}
        output = u"one:two/1:2/carrot:orange/"
        self.tag_test(template, context, output)

Это довольно похоже на то, как выкладываются тесты в собственном наборе тестов Django , но без использования довольно сложного механизма тестирования django

...