【问题标题】:How to test template context variables with Flask如何使用 Flask 测试模板上下文变量
【发布时间】:2012-05-21 23:12:31
【问题描述】:

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

在 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')

【问题讨论】:

    标签: python flask


    【解决方案1】:

    感谢@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')
    

    【讨论】:

      【解决方案2】:

      根据这些有限的信息,我建议将生成上下文的代码分成一个单独的单元并直接对其进行测试。映射上面的例子:

      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())
      

      【讨论】:

      • 模板上下文应该在视图函数/方法内部创建。把它放在外面只是为了测试不是一个好方法。更好的方法是通过flask-testing 测试上下文。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多