小编ecl*_*ne6的帖子

让Celery使用Django Test DB

我正在尝试在我的Django应用程序中为一些芹菜任务编写一些单元测试.这些任务将模型ID作为参数,执行一些操作并更新模型.当运行devserver和celery worker时,一切都很好,但是在运行我的测试时,很明显celery任务没有使用在测试运行过程中创建和销毁的django测试数据库.问题是,如何让芹菜使用与我的其他测试相同的临时数据库?

正如您所看到的,我正在使用针对类似问题的每个答案中建议的设置覆盖.

更新:发现不是将对象id传递给任务并让任务从数据库中获取,如果我只是将对象本身传递给任务,则测试工作正常,对任务的运行没有明显的负面影响.所以至少现在,这将是我的修复.

在我的测试中:

class JobTest(TestCase):

    @override_settings(CELERY_ALWAYS_EAGER=True,
                       CELERY_EAGER_PROPAGATES_EXCEPTIONS=True,
                       BROKER_BACKEND='memory')
    def test_Job_Complete(self):
        job = models.Job()
        job.save()
        tasks.do_a_thing(job.id)
        self.assertTrue(job.complete)
Run Code Online (Sandbox Code Playgroud)

在我的任务中:

@celery.task
def do_a_thing(job_id):
    job = models.Job.objects.get(pk=job_id)
    bunch_of_things(job)
    job.complete = True
    job.save()
Run Code Online (Sandbox Code Playgroud)

python django unit-testing celery django-celery

10
推荐指数
2
解决办法
1653
查看次数

标签 统计

celery ×1

django ×1

django-celery ×1

python ×1

unit-testing ×1