如何在 Django Nose 测试期间停止任务触发?

How to stop Tasks firing during Django Nose tests?

我有一个使用 Django Nose 的测试。在模型创建期间,我有一个 Celery 任务被触发。

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

所以测试不会 运行 任务?

你已经完成了一半:) 对于测试,我通常只是一个全局变量(Django 案例中的设置参数)。或环境变量告诉一个人应该跳过被测应用程序的某些方面。仅当没有其他方式与底层代码进行社区交流时,如设置 class 变量或标志。

在设置中 - 为 运行 测试创建一个单独的设置文件:

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