测试自定义 Django 模板过滤器

Posted

技术标签:

【中文标题】测试自定义 Django 模板过滤器【英文标题】:Testing a custom Django template filter 【发布时间】:2011-05-28 14:56:04 【问题描述】:

我在project/app/templatetags 下创建了一个自定义模板过滤器。

我想为我刚刚发现的一些错误添加一些回归测试。我该怎么做呢?

【问题讨论】:

先生。 @Vazquez-Abrams:然后添加什么?我认为实际渲染一个真正的模板将是一个糟糕的方法。想看看其他人使用了什么技术。 【参考方案1】:

测试模板过滤器的最简单方法是将其作为常规函数进行测试。

@register.filter 装饰器不会损害底层功能,您可以导入过滤器并像没有装饰一样使用它。这种方法对于测试过滤器逻辑很有用。

如果您想编写更多集成式测试,那么您应该创建一个 django 模板实例并检查输出是否正确(如 Gabriel 的回答所示)。

【讨论】:

这是正确的方法,除非您的模板非常小。不必渲染整个模板来测试一个过滤器!【参考方案2】:

这是我的做法(摘自my 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's own test suite 中的测试布局非常相似,但不依赖于 django 有点复杂的测试机制。

【讨论】:

这正是我想要的!谢谢。 如果您以这种方式设置测试,而我最终为您的公司工作并接管您的项目,我会非常愤怒。必须更新整个预期的模板输出只是为了测试一个过滤器?这是设置“单元”测试的不好方法,因为它依赖于整个模板内容。

以上是关于测试自定义 Django 模板过滤器的主要内容,如果未能解决你的问题,请参考以下文章

django自定义模板标签和过滤器

python测试开发django-71.自定义标签tag

Django之Django模板自定义过滤器

DJANGO之自定义模板过滤器

以变​​量为参数的 django 自定义模板过滤器

django 的模板语言template ,自定义过滤器,自定义标签,模板继承