json FastAPI中的测试不适用于相对静态路径文件

brc7rcf0  于 2023-03-13  发布在  其他
关注(0)|答案(1)|浏览(118)

我尝试在我的FastAPI应用程序中运行测试,我使用的是一个静态文件,其中包含一个带颜色的JSON。一旦我运行命令**'pytest {path of my test file}'**我得到错误- No such file or directory.
一开始我在后台的主页上运行下面这行代码-

app.mount("/static", StaticFiles(directory="static"), name="static")

应用程序工作正常,但测试不正常。
主要原因是这个功能:

with open("static/def_Sys/colors.json") as f:
    li = json.load(f)
    colors = [x['color'] for x in li]
    names = [x['label'] for x in li]
for (x, col) in zip(names, colors):
    colors_dict[x.upper()] = col  # save systems (key) and color(value) in dictionary and return it

return colors_dict

在那之后,我试着做了两个动作来解决它-
1.删除了mount行,并在函数中添加了以下路径:
打开(“../../../static/def_Sys/colors.json”)的函数为f:

但应用程序无法运行(这是当前脚本的相对路径)

1.删除了装载行,并更改为此行-
打开(os.路径.abspath(“静态\默认_系统\颜色. json”),“r”)作为f:

应用程序运行,但测试找不到此静态文件的路径。

此外,我注意到测试没有使用与应用程序相同的路径。
例如:当我们在pytest中运行时:
“C:\用户\用户\Pycharm项目\应用程序\静态\定义_系统\颜色. json”
当我们运行应用程序时:
“C:\用户\用户\Pycharm项目\应用程序\应用程序\静态\定义_系统\颜色. json”
我试图找到一个解决方案,让我运行测试和我的应用程序,而不改变每次运行之间的代码。

wxclj1h5

wxclj1h51#

您可以考虑使用https://github.com/tiangolo/fastapi/issues/3550https://github.com/tiangolo/fastapi/discussions/8748进行临时破解。

app.mount('/static', StaticFiles(directory=realpath(f'{realpath(__file__)}/../static')), name='static')

如果需要,同样适用于templates文件夹。

相关问题