初心者Flask質問。
次のようなFlaskルートがあります。
_@app.route('/')
def home():
return render_template(
'home.html',
greeting:"hello"
)
_
_'home.html'
_テンプレートがレンダリングされたこと、およびrender_template()
コンテキストがgreeting
変数を特定の値で定義したことをテストするにはどうすればよいですか?
これらは簡単にテストできるはずです(おそらく簡単です)が、Flaskとunittestを使用してこれを行う方法は本当にわかりません。
assert_template_used
TestCase
のメソッド flask-testing によって提供されます。
from flask.ext.testing import TestCase
class MyTest(TestCase):
def create_app(self):
return myflaskapp
def test_greeting(self):
self.app.get('/')
self.assert_template_used('hello.html')
self.assert_context("greeting", "hello")
メソッドcreate_app
はflaskアプリを提供する必要があります。
私の提案は、 テスト用のFlaskドキュメント を参照することです。
ドキュメントをガイドとして使用すると、応答の内容を確認できるテストケースを設定できるはずです。
import unittest
import yourappname
class MyAppTestCase(unittest.TestCase):
def setUp(self):
self.app = yourappname.app.test_client()
def test_greeting(self):
rv = self.app.get('/')
self.assertIn('hello', rv.data)
ここで、yourappname
はアプリ/プロジェクトの名前です。
Flask公式ドキュメント は template_rendered
シグナル(バージョン0.6以降で使用可能)テンプレートおよびそのレンダリングに使用される変数の単体テスト用。
たとえば、次のヘルパーコンテキストマネージャーは、ユニットテストで使用して、レンダリングされたテンプレートとテンプレートに渡された変数を判別できます。
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)
これは簡単にテストクライアントとペアにすることができます。
with captured_templates(app) as templates:
rv = app.test_client().get('/')
assert rv.status_code == 200
assert len(templates) == 1
template, context = templates[0]
assert template.name == 'index.html'
assert len(context['items']) == 10
HtmlページでJinjaセットアップを使用し、変数をページに渡して、更新されているかどうかを確認することができます。
http://flask.pocoo.org/docs/0.11/templating/#jinja-setup
例として:
@app.route('/')
def home():
return render_template(
'home.html',
greetingDictionary = {"greeting": "hello" , "forthoseabouttorock" :"wesaluteyou" }
)
{% for key in greetingDictionary %}
<h1>{{key}}</h1>
<p>{{greetingDictionary[key]}}</p>
{% endfor %}