我想在我的Django應用程序中爲一些芹菜任務編寫一些單元測試。這些任務以模型ID爲參數,做一些事情並更新模型。當運行一個devserver和芹菜工作者時,一切都很好,但是當運行我的測試時,很明顯celery任務沒有使用作爲測試運行的一部分被創建和銷燬的django測試數據庫。問題是,我怎麼能讓芹菜使用與我的其他測試一樣的臨時數據庫?如您所見,我正在使用在類似問題的每個答案中建議的設置覆蓋。讓芹菜使用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)
在我的任務:
@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