Python:Flask 的模拟补丁错误

2023-12-13

在编写 Python 方面,我完全是个新手,更不用说测试它了。

这是我的 Flask 端点:

@blueprint.route('/mailing_finish/<account_id>/<sumall_stream_id>/', methods=['POST'])
def mailing_finish(account_id, sumall_stream_id):
    """
    Get Response for mailing_id and update Dataset:
    * MYEMMA_EMAIL_SENDS: response['sent']
    """

    # TODO: webhook does not fire

    data = json.loads(request.data)['data']

    access_token = sumall_redis.get_oauth_token(account_id)

    response_data = sumall_audience.get_response_data(
        access_token=access_token,
        account_id=account_id,
        mailing_id=data['mailing_id'],
    )

    event = {
        'timeStamp': data['timestamp'][3:],
        'eventId': 'mailing_id:{mailing_id}'.format(
            mailing_id=data['mailing_id'],
        ),
        'data': {
            'MYEMMA_EMAIL_SENDS': {
                'value': response_data['recipient_count'],
                'dimensions': [
                    {
                        'dimension': 'MAILINGS',
                        'value': data['mailing_id'],
                    },
                ],
            },
        },
    }

    status = sumall_api.post_stream_event(
        stream_id=sumall_stream_id,
        event=event,
    )

    return 'Data sent to SumAll', status

这是我的测试:

@mock.patch('sumall.utils.sumall_api')
@mock.patch('sumall.utils.sumall_audience')
@mock.patch('sumall.utils.sumall_redis')
def test_mailing_finish(self, sumall_redis_mock, sumall_audience_mock, sumall_api_mock):

    sumall_redis_mock.get_oauth_token.return_value = self.access_token

    sumall_audience_mock.get_response_data.return_value = {'recipient_count': 2}

    event = {
        'timeStamp': self.data['timestamp'][3:],
        'eventId': 'mailing_id:{mailing_id}'.format(mailing_id=self.data['mailing_id'],),
        'data': {
            'EMAIL_SENDS': {
                'value': sumall_audience_mock.get_response_data.get('recipient_count'),
                'dimensions': [
                    {
                        'dimension': 'MAILINGS',
                        'value': self.data['mailing_id'],
                    },
                ],
            },
        },
    }

    res = self.client.post(
        '/webhooks/mailing_finish/{account_id}/{sumall_stream_id}'.format(
            account_id=self.account_id,
            sumall_stream_id=self.sumall_stream_id
        ),
        data=json.dumps({'data': self.data}),
        content_type='application/json',
    )

    sumall_redis_mock.get_oauth_token.assert_called_with(self.account_id)

    sumall_audience_mock.get_response_data.assert_called_with(
        access_token=self.access_token,
        account_id=self.account_id,
        mailing_id=self.data['mailing_id']
    )

    sumall_api_mock.post_stream_event.assert_called_with(
        stream_id=self.sumall_stream_id,
        event=event,
    )

我收到的错误是:

AssertionError: Expected call: get_oauth_token('123456')
Not called

我不确定出了什么问题。任何帮助将不胜感激!谢谢!


您导入了sumall_redis作为视图模块中的本地名称,但模拟原始名称sumall.utils.sumall_redis.

您可能在视图模块的顶部有这个:

from sumall.utils import sumall_redis

这将该对象绑定到模块中的本地名称。当测试开始并应用补丁时,只有原始的sumall_redis对象在sumall.utils模块将受到影响,而不是这个本地名称。

您需要模拟视图模块中绑定的名称:

@mock.patch('view_module.sumall_redis')

这也适用于您的其他 2 个导入。

The mock文档包括关于在哪里打补丁您可能想阅读。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python:Flask 的模拟补丁错误 的相关文章

随机推荐

  • Java中使用glob匹配路径字符串

    我有以下字符串作为全局规则 txt 以及测试数据 foo bar txt foo buz jpg foo oof text txt 是否可以使用 glob 规则 无需将 glob 转换为正则表达式 来匹配测试数据并返回值条目 要求一 Jav
  • 在 VBScript 中搜索字符串以验证是否包含字符

    我想看看一个字符串是否包含一个点 Set Root Currency Root TaxDataSummary SlvObject Currency curr val InStr Root Currency If curr val exist
  • 如何在 appengine java 应用程序中创建包含 google 云存储对象的 zip 存档?

    假设我有 50 个对象 每个对象 15Mb 存储在 Google Cloud Storage 中 现在我需要创建一个包含所有这些内容的 zip 存档并将生成的文件存储回 GCS 如何在 appengine java 应用程序中执行此操作 我
  • 匹配有效日期的正则表达式

    我正在尝试编写一个验证日期的正则表达式 正则表达式需要匹配以下内容 M D YYYY 月 日 年 单位数月份可以以前导零开头 例如 03 12 2008 单位数日期可以以前导零开头 例如 3 02 2008 不能包含 2 月 30 日或 2
  • 如何使用通知栏从服务调用活动

    这是我的情况 A1 启动画面活动 A2 主要活动 A3 额外活动 S1 GPS 服务 我从 A1 开始 创建启动 A2 的意图 然后 A1 完成 在 A2 内我创建并绑定 S1 在 S1 内我发出通知 CharSequence text g
  • ASP.NET 返回多个变量进行查看

    我无法弄清楚如何将多个变量返回到视图 像这样的东西 我可以得到一点帮助吗 public ActionResult CheatSheet var var1 from ts in db thisdatabase select ts var va
  • 如何将日期时间分配给带有间隔和日期开始的高图表

    HI 在 highchart 中 有什么方法可以在 x 轴上给出时间 如下所示 1 通过开始时间2 给出时间点数组3 给出时间单位 例如 start time will set as pointStart Date UTC timeArr
  • TeamCity:使用工件的文件版本标记 VCS (Subversion)

    我想在 SVN 中创建一个带有文件版本的标签 标签 我已经通过获取构建生成的主要可执行文件的文件版本来重命名该工件 例如 MyInstaller 1 2 3 1 exe 现在我想在 SVN 中创建一个名为 tags 1 2 3 1 我找不到
  • 在多个文件中具有相同的“require”是否会增加运行时间

    所以我计划将我的函数分成单独的文件 然后将它们导入到一个单独的文件中index js然后成为主要出口国 所以我想知道是否有类似的东西var bcrypt require bcrypt 在我的几个文件中比仅在一个文件中慢 这是我计划在 ind
  • 在 Typescript 中实现 Bull 队列

    我尝试在 Typescript 和 NestJS 中实现 Bull 队列 我的代码 Injectable export class MailService constructor InjectQueue mail private reado
  • 设置短值 Java

    我正在 J2ME 中编写一些代码 我有一个带有方法的类setTableId Short tableId 现在当我尝试写作时setTableId 100 它给出了编译时错误 如何在不声明另一个短变量的情况下设置短值 设置时Long我可以使用的
  • Android 更新ListView

    我看过Android 如何更新当前显示的ListView项目 and http commonsware com Android excerpt pdf和Android文档 但我还是不明白 我的问题 使用处理程序 我尝试更新 Stock 数据
  • Matlab中预计算函数的缓存结果

    我有两个数组 x and y x是函数的输入 y是函数值 例如 x 1 2 3 4 5 6 7 8 9 10 y 3 6 2 4 1 6 7 0 1 8 两者的长度相同 假设我有另一个数组z含有 2 3 8 9 10 3 长度不等于x an
  • 找出所有可能的欧拉循环

    我已经实现了一种算法来查找无向图中给定起始顶点的欧拉循环 使用 DFS 并删除访问的边 但它总是只返回一条路径 如何修改算法以搜索顶点的所有可能的欧拉循环 这是相关代码 typedef int Graph 200 200 adjacency
  • 如何使用socket.io从节点连接到telnet服务器

    我可能没有输入正确的搜索词 但我似乎找不到允许我的节点应用程序启动与另一个 telnet 服务器 非节点 的 socket io 客户端连接的好例子 下面是我的节点应用程序尝试连接到 telnet 服务器 var ioc require s
  • 除了 COM 之外,还有更好的方法来远程控制 Excel 吗?

    我正在开发一个回归测试工具 该工具将验证大量的 Excel 电子表格 目前 我使用最新版本的 pywin32 产品通过 Python 脚本通过 COM 控制它们 不幸的是 COM 似乎有许多恼人的缺点 例如 最轻微的干扰似乎就能中断与 CO
  • 创建用于导航的 ViewModel

    我有一个带有多个视图的 MVC 4 应用程序 IE 产品 食谱 分销商和商店 每个视图都基于一个模型 让我们保持简单 假设我的所有控制器都传递一个类似的视图模型 看起来像我的 Product 操作 public ActionResult I
  • 从代码隐藏中将页面异步模式设置为 true

    是否可以在我的代码隐藏文件中设置页面指令的异步模式 我没有办法直接修改属性 并努力寻找一种在我的代码隐藏中实现此功能的方法 我尝试在我的 Page Load 方法中添加Page AsyncMode true 但它返回以下错误 由于其保护级别
  • 如何使用 # 作为 CoffeeScript hereregex 的一部分?

    我正在尝试匹配 jQuery Mobile URL 的哈希片段 如下所示 matches window location hash match we re interested in the hash fragment the path t
  • Python:Flask 的模拟补丁错误

    在编写 Python 方面 我完全是个新手 更不用说测试它了 这是我的 Flask 端点 blueprint route mailing finish