单元测试调用返回JSONResponse的函数时无法访问content属性问题
问题原因
- 静态检查误报
FastAPI/Starlette 框架下的JSONResponse继承自基类Response,其官方类型定义中没有显式声明content实例属性,IDE 静态索引无法识别该动态生成的属性,因此会抛出 Unresolved Reference 提示,该情况不影响代码实际运行。 - 运行时属性确实不存在
你直接调用函数拿到的JSONResponse实例还未完成渲染流程:content属性是响应调用render()方法(ASGI 服务器处理响应时会自动触发)后才会动态生成的,未调用该方法前实例不存在该属性,运行时访问会直接报错。
解决方法
手动触发渲染后再校验
单元测试时拿到响应实例后,先手动调用render()方法完成渲染,再读取content属性即可:
import json # 测试开发环境场景示例 response = exception_handler(mock_request) response.render() # 手动触发渲染,生成content属性 res_data = json.loads(response.content) assert response.status_code == 404 assert "detail" in res_data
消除IDE静态报错
如果仅存在IDE提示不影响运行,可以用两种方式处理:
- 用
getattr安全读取属性:content = getattr(response, "content", b"") - 添加IDE忽略标记:PyCharm 可在代码行后加
# noinspection PyUnresolvedReferences,VS Code 可加# type: ignore
额外注意
你当前代码里直接将NotFoundException类作为值传入序列化参数,实际返回时会被序列化为类的全路径字符串,如果需要返回异常提示信息,建议调用异常实例的__str__方法,比如{"detail": str(NotFoundException())}。
内容的提问来源于stack exchange,提问作者Godzy
相关产品推荐
相关产品推荐

