Тестирование кода, для которого требуется приложение Flask или контекст запроса
Я получаю working outside of request context
при попытке доступа session
в тесте. Как я могу настроить контекст, когда я тестирую что-то, что требует этого?
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()
1 ответ
Если вы хотите сделать запрос к вашему заявлению, используйте 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
, 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.