Подтвердить что ты не робот

Тестирование настраиваемого фильтра шаблонов Django

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

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

4b9b3361

Ответ 1

Вот как я это делаю (извлечен из мой 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 несколько сложное тестовое оборудование.

Ответ 2

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

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

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