我一直在尝试为我在 django 项目中所做的事情构建测试用例。在项目中,很少有 celery 任务在信号时执行(pre_save,post_delete..etc)
我也一直使用 django-nose 作为我的 test_runner,所以为了让它一起工作,我做了我自己的跑步者并继承了这两个类
# -*- coding: utf-8 -*-
from django_nose import NoseTestSuiteRunner
from djcelery.contrib.test_runner import CeleryTestSuiteRunner
class MixedInTestRunner(NoseTestSuiteRunner, CeleryTestSuiteRunner):
pass
我还更新了我TEST_RUNNER
使用上面的类,下面是我的 celery.py conf,它在我的 settings.py 中导入
from __future__ import absolute_import, unicode_literals
from celery import Celery
app = Celery('proj',
broker='amqp://')
# Optional configuration, see the application user guide.
app.conf.update(
CELERY_TASK_RESULT_EXPIRES=3600,
CELERY_TASK_SERIALIZER='json',
CELERY_ACCEPT_CONTENT=['json'],
CELERY_RESULT_SERIALIZER='json',
CELERY_RESULT_BACKEND='djcelery.backends.database:DatabaseBackend',
)
if __name__ == '__main__':
app.start()
此时奇怪的是,当我为特定应用程序运行测试用例时,它成功执行而没有任何问题
./manage.py test --nologcapture -s messaging # this works
但是当我为所有应用程序运行时,对于所有依赖 celery 任务返回值的任务,我都会收到错误,即使 result.successful() 总是返回 false
./manage.py test --nologcapture -s # this fails