Я разрабатываю приложение Flask и использую Flask-security для аутентификации пользователей (что в свою очередь использует подставку Flask под ней).
У меня есть маршрут, который требует аутентификации, /user
. Я пытаюсь написать unit test, который проверяет, что для аутентифицированного пользователя это возвращает соответствующий ответ.
В моем unittest я создаю пользователя и регистрирую его как этого пользователя:
from unittest import TestCase
from app import app, db
from models import User
from flask_security.utils import login_user
class UserTest(TestCase):
def setUp(self):
self.app = app
self.client = self.app.test_client()
self._ctx = self.app.test_request_context()
self._ctx.push()
db.create_all()
def tearDown(self):
if self._ctx is not None:
self._ctx.pop()
db.session.remove()
db.drop_all()
def test_user_authentication():
# (the test case is within a test request context)
user = User(active=True)
db.session.add(user)
db.session.commit()
login_user(user)
# current_user here is the user
print(current_user)
# current_user within this request is an anonymous user
r = test_client.get('/user')
В рамках теста current_user
возвращается правильный пользователь. Однако запрошенный вид всегда возвращает AnonymousUser
как current_user
.
Маршрут /user
определяется как:
class CurrentUser(Resource):
def get(self):
return current_user # returns an AnonymousUser
Я уверен, что я просто не совсем понимаю, как работают проверки контекста запроса флэков. Я прочитал эту флешку запросить контекстную документацию, но я до сих пор не понимаю, как подойти к этому конкретному unit test.