【发布时间】:2019-09-13 03:59:12
【问题描述】:
如何模拟绑定上下文,或模拟 celery 任务 ID?
给定一个芹菜任务,例如:
helpers.py:
from task import some_task
def some_helper():
some_task.delay(123)
在task.py中:
@app.task(queue="abc", bind=True)
def some_task(self, some_number: int):
print(self.id) # how to mock this attribute access?
简单的测试用例:
from django.test.testcases import TestCase
from helpers import some_helper
class SomeTest(TestCase):
def test_some_helper(self):
some_helper()
我试过了:
@patch("celery.app.base.Celery.task", return_value=lambda x: x)
我也试过了:
class MockResult(dict):
def __getattr__(self, x):
return self[x]
...
def test_some_task(self):
cls = MockResult({"id": "asdf"})
bound_some_task = some_task.__get__(cls, MockResult)
bound_some_task(123)
相关:
【问题讨论】:
标签: django python-3.x unit-testing celery