2015-05-11 28 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