11

Djangoのテストクライアントは、テンプレートのレンダリングに使用されたテンプレートコンテキスト変数を含むテストResponseオブジェクトを返します。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')
4

2 に答える 2

24

@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')
于 2012-05-22T02:18:22.287 に答える
-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())
于 2012-05-21T23:20:01.180 に答える