我正在try 使用python模拟库来修补在Django应用程序中保存模型时运行的Celery 任务,以查看它是否被正确调用.
基本上,任务在myapp.tasks
中定义,并在我的模型顶部导入.像这样的py文件:
from .tasks import mytask
...然后在模型中使用mytask.delay(foo, bar)
在save()
上运行.到目前为止还不错——当我真的在用Celery 等植物时,效果很好.
我想构建一个模拟任务的单元测试,只是为了判断是否使用正确的参数调用了它,并且不会实际try 运行Celery 任务.
因此,在测试文件中,我在标准TestCase中获得了类似以下内容:
from mock import patch # at the top of the file
# ...then later
def test_celery_task(self):
with patch('myapp.models.mytask.delay') as mock_task:
# ...create an instance of the model and save it etc
self.assertTrue(mock_task.called)
.但是它从来不会被调用/总是错误的.我try 了各种版本(改为修补myapp.models.mytask
,并判断是否调用了mock_task.delay
).我从模拟文档中收集到导入路径非常重要,Google搜索告诉我它应该是在测试模块中看到的路径(如果我理解正确的话,应该是myapp.models.mytask.delay
而不是myapp.tasks.mytask.delay
).
我到底哪里错了?在修补Celery 任务时有没有一些具体的困难?我可以打celery.task
号补丁(用来做mytask
的装饰师)吗?