2012-05-21 5 views
10

Djangoのテストクライアントは、テンプレートのレンダリングに使用されたテンプレートコンテキスト変数を含むtestレスポンスオブジェクトを返します。 https://docs.djangoproject.com/en/dev/topics/testing/#django.test.client.Response.contextFlaskでテンプレートコンテキスト変数をテストする方法

Flaskでテスト中にテンプレートのコンテキスト変数にアクセスするにはどうすればよいですか?

例図:

@pgt.route('/myview') 
def myview(): 
    context = { 
     'var1': 'value 1', 
     'var2': 'value 2', 
     'var3': 'value 3', 
    } 
    return render_template('mytemplate.html', **context) 

例試験:

class MyViewTestCase(unittest.TestCase): 
    def setUp(self): 
     self.app = create_app() 
     self.client = self.app.test_client() 

    def test_get_success(self): 
     response = self.client.get('/pgt/myview') 

     # I don't want to do this 
     self.assertIn('value 1', response.data) 

     # I want to do something like this 
     self.assertEqual(response.template_context['var1'], 'value 1') 

答えて

22

おかげ(バージョン)Flask-Testing

from flask.ext.testing import TestCase 


class MyViewTestCase(TestCase): 
    def create_app(self): 
     # This method is required by flask.ext.testing.TestCase. It is called 
     # before setUp(). 
     return create_app() 

    def test_get_success(self): 
     response = self.client.get('/pgt/myview') 
     self.assertEqual(self.get_context_variable('var1'), 'value 1') 
-1

この限られた情報から、私は別のユニットにコンテキスト生成コードを壊す示唆し、直接それをテストすることになります。上記の例をマッピング:私が使用@andrewwatts

def get_context(): 
    context = { 
     'var1': 'value 1', 
     'var2': 'value 2', 
     'var3': 'value 3', 
    } 
    return context 

@pgt.route('/myview') 
def myview(): 
    return render_template('mytemplate.html', **get_context()) 
+1

テンプレートコンテキストがビュー関数/メソッドの内部で作成されなければなりません。テストのためだけにそれを置くことは良い方法ではありません。より良い方法は、[flask-testing](http://packages.python.org/Flask-Testing/)でコンテキストをテストすることです。 – Jarus

関連する問題