2015-05-11 32 views
0

我有一個測試,我使用Django鼻子。在模型創建過程中,我有一個Celery任務被解僱。如何停止在Django鼻子測試期間發射的任務?

def save(self, *args, **kwargs): 
    celery_app.send_task('test.apps.action', 
           args=["BB", 
             self.user.id, 
             ], kwargs={}) 

但是,當我運行我的測試時,我不希望它運行Celery任務!我怎樣才能做到像......

def save(self, *args, **kwargs): 

    if running_not_nose_tests: 

     celery_app.send_task('test.apps.action') 
    else: 
     pass 

因此,測試不運行任務?

回答

1

你知道它的一半:)對於測試,我通常只是一個全局變量(Django案例中的設置參數)。或環境變量告訴用戶應該跳過應用程序在測試下的某些方面。這隻有當沒有其他方式與底層代碼共同使用時,例如設置類變量或標誌。

在設置 - 創建運行測試單獨設置文件:

SKIP_TASKS = True 

然後:

from django.conf import settings 

def save(self, *args, **kwargs): 

    if not settings.SKIP_TASKS: 

     celery_app.send_task('test.apps.action') 
    else: 
     pass 

或者從環境變量的命令行:

SKIP_TASKS=true python manage.py test 

import os 

def save(self, *args, **kwargs): 

    if not os.environ.get("SKIP_TASKS"): 

     celery_app.send_task('test.apps.action') 
    else: 
     pass 
+0

這將使我在分期環境中遇到的問題。沒有辦法確定測試跑步者是否......跑步? – Prometheus

+0

使用不同的命令行,環境變量或設置來確定您是否在分段運行代碼。如果測試運行器正在運行,發出信號的方式是在啓動測試時告訴應用程序「ok我正在執行測試運行」 –

+0

我明白了,我可以在運行測試命令''' python manage.py test --SKIP_TASKS = True'' – Prometheus