我正在开发一个 Flask 应用程序并使用 Flask-security 进行用户身份验证(这反过来又在下面使用 Flask-login)。
我有一条需要身份验证的路线,/user. 我正在尝试编写一个单元测试来测试,对于经过身份验证的用户,这将返回适当的响应。
在我的单元测试中,我正在创建一个用户并以该用户身份登录,如下所示:
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
我很确定我只是没有完全理解测试 Flask 请求上下文是如何工作的。我已经阅读了很多 Flask Request Context 文档,但我仍然不明白如何处理这个特定的单元测试。