在 Python Flask 蓝图中模拟函数

Cos*_*mer 5 python unit-testing patch mocking flask

我有一个名为 api 的 Python Flask 蓝图,其中有一个名为 utils 的文件,其中包含一个我试图模拟的函数。该 utils 文件的路径是app/api/utils.py,而我试图模拟的函数是is_file_writeable().

我正在对位于 的蓝图中的路线进行测试app/api/configs.py。在 中configs.py,我按如下方式导入函数:

from app.api.utils import is_file_writeable
Run Code Online (Sandbox Code Playgroud)

我尝试了以下补丁装饰器:

@patch('app.api.configs.is_file_writeable', return_value=False)
Run Code Online (Sandbox Code Playgroud)

@patch('app.api.utils.is_file_writeable', return_value=False)
Run Code Online (Sandbox Code Playgroud)

两者分别返回以下错误:

AttributeError: 'Blueprint' 对象没有属性 'configs'

AttributeError: 'Blueprint' 对象没有属性 'utils'

关于为什么我收到导入错误的任何想法?

Dan*_*ber 1

当我遇到这个问题时,这是因为它api是一个蓝图。嘲笑者不是在configs.py文件夹下寻找 ,而是在寻找蓝图中调用的东西。apiutilsapi

为了解决这个问题,我导入了 py 文件并直接修补了对象:

from app.api import utils

@patch.object(utils, 'is_file_writeable', lambda x: False)
Run Code Online (Sandbox Code Playgroud)