Тестирование кода, для которого требуется приложение Flask или контекст запроса

При попытке доступа к session в тесте я работаю working outside of request context . Как настроить контекст, когда я тестирую то, что требует его?

 import unittest from flask import Flask, session app = Flask(__name__) @app.route('/') def hello_world(): t = Test() hello = t.hello() return hello class Test: def hello(self): session['h'] = 'hello' return session['h'] class MyUnitTest(unittest.TestCase): def test_unit(self): t = tests.Test() t.hello() 

Если вы хотите сделать запрос к вашему приложению, используйте test_client .

 c = app.test_client() response = c.get('/test/url') # test response 

Если вы хотите протестировать код, который использует контекст приложения ( current_app , g , url_for ), нажмите app_context .

 with app.app_context(): # test your app context code 

Если вам нужен тестовый код, который использует контекст request ( request , session ), нажмите test_request_context .

 with current_app.test_request_context(): # test your request context code 

Оба контекста приложения и запроса также могут быть перенесены вручную, что полезно при использовании интерпретатора.

 >>> ctx = app.app_context() >>> ctx.push() 

Flask-Script или новый Flask cli автоматически будут использовать контекст приложения при запуске команды shell .


Flask-Testing – полезная библиотека, содержащая помощники для тестирования приложений Flask.