我正在尝试在我的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)