我正在使用 JWT 授权创建一个 Flask 应用程序,并尝试使用 PyTest 测试服务。
我成功地将测试添加到端点,但是当我尝试为某些功能添加单元测试时,我无法访问当前用户,因为flask_jwt_extended.get_current_user()
返回 None。
这是一个简单的例子:
@api.route('/listings', methods=['POST'])
@jwt_required
def create_listing():
payload = request.json
listing = listing_svc.create(payload)
return listing
def create(payload):
listing = ListingSchema().load(payload, db.session).data
class ListingSchema(ModelSchema):
id = field_for(Project, 'id', dump_only=True)
creator_user_id = field_for(Project, 'creator_user_id')
# ...
@pre_load
def set_creator_id(self, data):
current_user = flask_jwt_extended.get_current_user()
data['creator_user_id'] = current_user.id
当我使用 app_context 授权和发送请求时,它可以工作:
with client.application.app_context():
rv = client.post('/listings',
# ...
)
但我需要的是在create
不向客户端发送请求的情况下测试功能。在这种情况下flask_jwt_extended.get_current_user()
返回无,所以我认为我应该在运行这个函数之前以某种方式设置请求上下文。
我试着这样做...
fake_payload = {}
with client.application.test_request_context('/listings', headers={'Authorization': 'Bearer ' + access_token}):
create(fake_payload)
但仍然得到current_user
的是None
这就是我获得令牌的方式:
def login(email, password):
user = get_by_email(email)
if user and check_password_hash(user.password, password):
return access_token = flask_jwt_extended.create_access_token(identity=email)