测试自定义 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 模板过滤器的主要内容,如果未能解决你的问题,请参考以下文章