我正在尝试使用python mock库来修补一个芹菜任务,该任务是在我的django应用程序中保存模型时运行的,以查看它是否被正确调用。
基本上,任务是在myapp.tasks
中定义的,并导入到我的models.py文件的顶部,如下所示:
from .tasks import mytask
然后,...and使用mytask.delay(foo, bar)
在模型内部的save()
上运行。到目前为止还不错-当我实际运行Celeryd等时,运行得很好。
我想构建一个模拟任务的单元测试,只是为了检查是否使用正确的参数调用了它,而不是真正尝试运行芹菜任务。
所以在测试文件中,我在一个标准的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)
...but它从不被调用/总是为false。我尝试过不同的版本(改为修补myapp.models.mytask
,并检查是否调用了mock_task.delay
。我从模拟文档中收集到导入路径是至关重要的,谷歌搜索告诉我,它应该是在测试模块中看到的路径(如果我理解正确的话,应该是myapp.models.mytask.delay
而不是myapp.tasks.mytask.delay
)。
我在哪里做错了?在修补芹菜任务时是否存在一些特定的困难?我可以给celery.task
打补丁(它被用作mytask
的装饰器)吗?
https://stackoverflow.com/questions/18212131
复制相似问题