在Flask中,如何测试返回到Jinja模板的变量render_template?
@app.route('/foo/'):
def foo():
return render_template('foo.html', foo='bar')
Run Code Online (Sandbox Code Playgroud)
在这个例子中,我想测试foo等于"bar".
import unittest
from app import app
class TestFoo(unittest.TestCase):
def test_foo(self):
with app.test_client() as c:
r = c.get('/foo/')
# Prove that the foo variable is equal to "bar"
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
这可以使用信号完成.我将在这里重现代码snippit:
import unittest
from app import app
from flask import template_rendered
from contextlib import contextmanager
@contextmanager
def captured_templates(app):
recorded = []
def record(sender, template, context, **extra):
recorded.append((template, context))
template_rendered.connect(record, app)
try:
yield recorded
finally:
template_rendered.disconnect(record, app)
class TestFoo(unittest.TestCase):
def test_foo(self):
with app.test_client() as c:
with captured_templates(app) as templates:
r = c.get('/foo/')
template, context = templates[0]
self.assertEquals(context['foo'], 'bar')
这是另一个删除template部件并将其转换为迭代器的实现.
import unittest
from app import app
from flask import template_rendered
from contextlib import contextmanager
@contextmanager
def get_context_variables(app):
recorded = []
def record(sender, template, context, **extra):
recorded.append(context)
template_rendered.connect(record, app)
try:
yield iter(recorded)
finally:
template_rendered.disconnect(record, app)
class TestFoo(unittest.TestCase):
def test_foo(self):
with app.test_client() as c:
with get_context_variables(app) as contexts:
r = c.get('/foo/')
context = next(context)
self.assertEquals(context['foo'], 'bar')
r = c.get('/foo/?foo=bar')
context = next(context)
self.assertEquals(context['foo'], 'foo')
# This will raise a StopIteration exception because I haven't rendered
# and new templates
next(context)
| 归档时间: |
|
| 查看次数: |
310 次 |
| 最近记录: |