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

Fel*_*ago 7 python templates unit-testing jinja2

我一直在寻找一种对 jinja2 模板进行单元测试的方法。我已经做了一些研究,但我唯一能找到的是如何测试传递给模板的变量: 如何对从 webapp2 请求处理程序传递给 jinja2 模板的模板变量进行单元测试

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

我想我可以创建一个“黄金”文件,这样我就可以将生成的文件与黄金文件进行比较,但是由于可能性的数量,这将需要太多的“黄金”文件。

还有其他想法吗?

Pax*_*x0r 8

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

类似的东西:

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
Run Code Online (Sandbox Code Playgroud)

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

  • 谢谢您的回答。我期待更具体的东西来测试模板内的逻辑。我的意思是,我将断言的值可以由模板中的不同情况生成。仅检查输出并不能保证模板所做的流是我所期望的。但无论如何,我会接受您的回答,因为无论如何我都会使用它。再次感谢! (2认同)