【发布时间】:2018-04-10 13:18:20
【问题描述】:
我有一个任务foobar:
@app.task(bind=True)
def foobar(self, owner, a, b):
if already_working(owner): # check if a foobar task is already running for owner.
register_myself(self.request.id, owner) # add myself in the DB.
return a + b
如何模拟self.request.id 属性?我已经在修补所有内容并直接调用任务而不是使用.delay/.apply_async,但self.request.id 的值似乎是None(因为我正在与数据库进行真正的交互,这使得测试失败,等等......) .
作为参考,我使用Django作为框架,但我认为这个问题是一样的,无论你使用什么环境。
【问题讨论】:
-
这没有意义。该任务是课程的一部分吗?如果有,请出示;如果没有,它就没有
self。而且在任何情况下,任务都不会作为请求的一部分运行,那么为什么会有self.request? -
@DanielRoseman 你已经用过 Celery 了吗?如果没有,请事先阅读:docs.celeryproject.org/en/latest/userguide/…;装饰器将函数包装在一个类中。
标签: django unit-testing celery