2016-11-21 73 views
5

我想在我的Django测试期间同步调用芹菜任务,而无需运行芹菜工作者。为了达到这个目的,我在我的settings.py中指定了CELERY_ALWAYS_EAGER=True,但它似乎不起作用。所以,我决定申请装饰以override_settings特定的测试看起来像这样无法在Django测试中同步调用芹菜任务

@override_settings(CELERY_ALWAYS_EAGER=True, BROKER_BACKEND='memory', 
         CELERY_EAGER_PROPAGATES_EXCEPTIONS=True) 
def test_foo(self): 
... 

不幸的是,这个测试仍然在我的芹菜工人调用任务。我可以错过什么?具体来说,我使用Django 1.10和Celery 4.0.0。

+0

如果芹菜相关设置一些在内存中的对象持久化的芹菜应用程序在启动时你的测试跑步者,压倒他们可能没有任何效果。你有没有试过用不同的设置文件来启动你的测试跑步者? – schwobaseggl

+0

这似乎是已知的问题。有关该主题的讨论(https://groups.google.com/forum/#!topic/celery-users/1WmrfFZ9nHs)。他们在运行时改变'celery.Celery()。conf'对象,而不是典型的'django.conf' – schwobaseggl

回答

10

芹菜4.0配置参数发生了变化,

尝试这些中,而不是你的测试,

@override_settings(
    task_eager_propagates=True, 
    task_always_eager=True, 
    broker_url='memory://', 
    backend='memory' 
) 

我面临同样的问题,用新的小写的名字测试,以及在默认情况下解决芹菜设置。

这里是新的设置到初始设置的地图,
http://docs.celeryproject.org/en/latest/userguide/configuration.html#new-lowercase-settings

芹菜设置更改信息:
http://docs.celeryproject.org/en/latest/whatsnew-4.0.html#lowercase-setting-names