python - 如何确保 Celery 任务在 Pytest 中排队?
问题描述
我有一个 API 端点来注册新用户。“欢迎电子邮件”将排队并异步执行此任务。我有 2 个单元测试要检查:
- Api 确实将用户信息保存到 DB OK
- Celery 任务确实发送带有正确内容+模板的电子邮件
我想添加第三个单元测试以确保“将用户表单保存到数据库后,端点必须排队发送电子邮件”
我尝试使用 celery.AsyncResult 但它要求我运行工人。更进一步,即使工人准备好了,我们仍然无法验证任务是否入队,因为模棱两可的 PENDING 状态:
- 任务存在于队列中但尚未执行:PENDING
- 队列中不存在任务:PENDING
有人遇到这个问题吗?我该如何解决?
解决方案
在测试环境中解决这个问题的常用方法是使用task_always_eager配置设置,它基本上指示 Celery 像常规函数一样运行任务。代替 AsyncResult,Celery 将创建一个行为相同但执行逻辑完全不同的 EagerResult 类型的对象。
推荐阅读
- reactjs - 有什么办法可以让这变得更好吗?上传多个图像并将它们链接到 firestore db 对象
- javascript - 移动到其他月份时如何增加日期
- jquery - Drupal 7:自动加载下一篇文章
- javascript - 打字稿/Vue3 - 强制使用类型“任何”
- amazon-web-services - AWS 简单电子邮件服务为 XSS 转义用户输入
- wordpress - 我应该如何将 woocommerce_coupon_is_valid 过滤器用于弹出脚本标签?
- node.js - Google auth0 一键登录未正确发送数据
- node.js - 使用 Typescript 创建类默认 api Restful nodejs
- bash - 来自 bash 的 aws cli 命令与 jq 从日志存储桶失败中获取 S3 日志
- ssh - 无法使用 ssh 连接