장고 앱의 일부 셀러리 작업에 대한 단위 테스트를 작성하려고합니다. 이러한 작업은 모델 ID를 인수로 사용하고, 일부 작업을 수행하고, 모델을 업데이트합니다. devserver 및 셀러리 작업자를 실행할 때 모든 것이 잘 작동하지만 테스트를 실행할 때 샐러리 작업은 테스트 실행의 일부로 생성되고 파괴되는 django 테스트 db를 사용하지 않는다는 것이 분명 해졌다. 질문 : 셀러리가 나머지 테스트와 동일한 임시 DB를 사용하려면 어떻게해야합니까?Django 테스트 DB를 사용하기 위해 샐러리 가져 오기
위에서 볼 수 있듯이 비슷한 문제에 대한 모든 대답에서 제안 된 설정 우선 적용을 사용하고 있습니다.
업데이트 : 개체 id를 작업에 전달하는 대신 작업을 db에 전달하는 대신 개체 자체를 작업에 전달하면 테스트가 제대로 작동 함을 나타냅니다. 작업. 그래서 적어도 지금은 그것이 나의 수정 일 것입니다. 내 테스트에서
:
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)
내 작업에서는 :
는@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()
그러나 작업에서 객체 자체를 전달하면 이전에 저장 한 데이터를 되 돌리는 것과 같은 부작용이 생길 수 있습니다. 이것은 여전히 귀하의 솔루션입니까 아니면 다른 솔루션이 있습니까? – Jonathan