如何确保芹菜任务已排入Pytest?

时间:2019-07-01 04:43:33

标签: python unit-testing celery pytest

我有一个API端点来注册新用户。 “欢迎电子邮件”将排队并异步执行此任务。我有2个单元测试要检查:

  1. Api确实将用户信息保存到DB OK
  2. 芹菜任务确实发送带有正确内容和模板的电子邮件

我要添加第三个单元测试,以确保“端点将用户表单保存到DB后必须排队发送电子邮件”

我尝试使用celery.AsyncResult,但它要求我运行工作程序。更进一步,即使工作人员准备就绪,我们仍然无法验证任务是否已排队,因为模棱两可的PENDING状态:

  1. 任务在队列中,但尚未执行:待处理
  2. 队列中不存在任务:PENDING

有人遇到这个问题吗?我该如何解决?

1 个答案:

答案 0 :(得分:0)

在测试环境中解决此问题的常用方法是使用task_always_eager配置设置,该设置基本上指示Celery像常规函数一样运行任务。 Celery会代替EsyncrResult类型的对象,而不是AsyncResult,该对象的行为相同,但是执行逻辑完全不同。