如何对jinja2模板逻辑进行单元测试?

8

我一直在寻找一种测试jinja2模板的方法,但我只找到了如何测试传递给模板的变量的相关内容:

如何测试传递给jinja2模板的变量

换句话说,我想测试模板中使用的逻辑是否生成了预期的输出。

我曾考虑过创建一个“黄金”文件,以便比较生成的文件和黄金文件,但由于可能性太多,这将需要太多的“黄金”文件。

还有其他的想法吗?

1个回答

10

为什么不在测试中将模板渲染为字符串,然后检查渲染出的模板是否正确呢?

类似这样:

import jinja2

# assume it is an unittest function
context = {  # your variables to pass to template
    'test_var': 'test_value'
}
path = 'path/to/template/dir'
filename = 'tempalte_to_test.tpl'

rendered = jinja2.Environment(
    loader=jinja2.FileSystemLoader(path)
).get_template(filename).render(context)

# `rendered` is now a string with rendered template
# do some asserts on `rendered` string 
# i.e.
assert 'test_value' in rendered

我不确定如何计算覆盖率。


2
谢谢你的回答。我希望能得到更具体的内容来测试模板内部的逻辑。我的意思是,我要断言的值可以由模板中的不同情况生成。仅检查输出并不能保证模板执行的流程符合我的预期。 但无论如何,我还是会接受你的答案,因为我仍然会使用它。再次感谢! - Felipe Santiago

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接