2012-05-21 27 views
10

Django的测试客户端返回一个测试Response对象,其中包含用于呈现模板的模板上下文变量。 https://docs.djangoproject.com/en/dev/topics/testing/#django.test.client.Response.context如何使用Flask测试模板上下文变量

如何在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

由于@andrewwatts我用(一个版本的)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

从该有限的信息,我建议打破上下文产生代码到一个单独的单元和测试直接。映射上面的例子:

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

相关问题