【问题标题】:Mocking a function within a Python Flask Blueprint在 Python Flask 蓝图中模拟函数
【发布时间】:2016-02-25 01:25:33
【问题描述】:

我有一个名为 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

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

@patch('app.api.configs.is_file_writeable', return_value=False)

@patch('app.api.utils.is_file_writeable', return_value=False)

两者分别返回以下错误:

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

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

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

【问题讨论】:

  • 您需要的只是@patch('app.api.configs.is_file_writeable', return_value=False),但从您的日志中可以看出app.apiBlueprint 对象而不是python 模块。不幸的是我不使用烧瓶,我无法帮助你。你可以把print(app.api)之类的东西放在你的测试模块的顶部,看看它是否是一个模块。
  • 提供完整的堆栈跟踪怎么样?

标签: python unit-testing flask mocking patch


【解决方案1】:

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

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

from app.api import utils

@patch.object(utils, 'is_file_writeable', lambda x: False)

【讨论】:

    猜你喜欢
    • 2018-04-04
    • 2020-05-18
    • 1970-01-01
    • 2012-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-12
    • 1970-01-01
    相关资源
    最近更新 更多