如何正确模拟在另一个芹菜任务中调用的芹菜任务? (下面的虚拟代码)
@app.task
def task1(smthg):
do_so_basic_stuff_1
do_so_basic_stuff_2
other_thing(smthg)
@app.task
def task2(smthg):
if condition:
task1.delay(smthg[1])
else:
task1.delay(smthg)
我在my_module中有完全相同的代码结构。凸出/ CEL / my_module.py 我正在尝试在proj / tests / cel_test / test.py
中编写测试测试功能:
def test_this_thing(self):
# firs I want to mock task1
# i've tried to import it from my_module.py to test.py and then mock it from test.py namespace
# i've tried to import it from my_module.py and mock it
# nothing worked for me
# what I basically want to do
# mock task1 here
# and then run task 2 (synchronous)
task2.apply()
# and then I want to check if task one was called
self.assertTrue(mocked_task1.called)
答案 0 :(得分:2)
首先,测试Celery任务可能非常困难。我通常将我的所有逻辑放入一个不是任务的函数中,然后创建一个只调用该函数的任务,以便您可以正确地测试逻辑。
其次,我认为你不想在任务中调用任务(不确定,但我相信通常不建议这样做)。相反,根据您的需要,您可能应该进行链接或分组:
http://docs.celeryproject.org/en/latest/userguide/canvas.html#the-primitives
最后,要回答您的实际问题,您需要准确修补代码中delay
方法的位置,如this post中所述。