2016-11-21 66 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