在pytest中Mock JWT验证失败,返回401未授权错误
问题原因及解决办法
你的测试返回401是因为Mock的目标路径不对。@patch("flask_jwt_extended.verify_jwt_in_request")直接Mock了原库中的函数,但你的路由代码里已经把verify_jwt_in_request导入到了自己的模块中,装饰器实际调用的是你模块内的引用,而非原库的函数。
具体解决步骤:
1. 修正Mock的目标路径
假设你的路由代码所在模块是your_app.sites(即定义sites_blueprint的文件),需要将Mock目标改为你模块中导入的verify_jwt_in_request:
# 替换成你实际的模块路径,比如路由在app/sites.py就写"app.sites.verify_jwt_in_request" @patch("your_app.sites.verify_jwt_in_request") def test_sites(mock_verify, client): response = client.get('/sites/get') assert response.status_code == 200
2. (可选)使用Flask-JWT-Extended自带测试工具
如果不想用Mock,也可以用库提供的方法生成合法Token,添加到请求头中模拟真实请求:
from flask_jwt_extended import create_access_token def test_sites(client): # 生成测试用Token access_token = create_access_token(identity="test_user") # 携带Token发起请求 response = client.get('/sites/get', headers={"Authorization": f"Bearer {access_token}"}) assert response.status_code == 200
这种方式更贴近真实业务场景,还能顺带验证Token逻辑的正确性。
内容的提问来源于stack exchange,提问作者Graham Patrick
相关产品推荐
相关产品推荐

