如何使用 PyCharm 在 django 测试中 运行 芹菜
How to run celery in django tests using PyCharm
我正在尝试测试我的 Django 应用程序功能。
我的一些任务正在使用 Celery。
如何使用 PyCharm 在我的测试环境中 运行 芹菜?
使用 mock 库将解决您的问题。
要在不测试 celery 的情况下进行单元测试,您可能需要模拟您的 @shared_task 装饰器
from unittest import mock
@mock.patch('celery.shared_task', lambda *args, **kwargs: lambda func: func)
def test_celery_unit()
from tasks import mytask
result = mytask() # could be call just as a function
我假设您正在使用 shared_task 装饰器并且 运行 将任务设置为 function_name.delay()
这可以通过添加一个条件来测试,如果 运行 在本地(或通过测试)并在生产中使用芹菜,则 运行 是任务。这也允许在不使用 celery 的情况下在本地 运行 服务器,这样可以更容易调试和维护。
PRODUCTION = False
if PRODUCTION:
some_task.delay()
else:
some_task()
也可以创建一个装饰器来做同样的事情,它更漂亮,但维护起来可能更复杂?
我正在尝试测试我的 Django 应用程序功能。
我的一些任务正在使用 Celery。
如何使用 PyCharm 在我的测试环境中 运行 芹菜?
使用 mock 库将解决您的问题。
要在不测试 celery 的情况下进行单元测试,您可能需要模拟您的 @shared_task 装饰器
from unittest import mock
@mock.patch('celery.shared_task', lambda *args, **kwargs: lambda func: func)
def test_celery_unit()
from tasks import mytask
result = mytask() # could be call just as a function
我假设您正在使用 shared_task 装饰器并且 运行 将任务设置为 function_name.delay()
这可以通过添加一个条件来测试,如果 运行 在本地(或通过测试)并在生产中使用芹菜,则 运行 是任务。这也允许在不使用 celery 的情况下在本地 运行 服务器,这样可以更容易调试和维护。
PRODUCTION = False
if PRODUCTION:
some_task.delay()
else:
some_task()
也可以创建一个装饰器来做同样的事情,它更漂亮,但维护起来可能更复杂?