【发布时间】:2018-03-13 20:03:26
【问题描述】:
当 Django 测试用例运行时,它会创建一个隔离的测试数据库,以便在每个测试完成时回滚数据库写入。我正在尝试使用 Celery 创建一个集成测试,但我不知道如何将 Celery 连接到这个临时测试数据库。在幼稚的设置中,保存在 Django 中的对象对 Celery 是不可见的,而保存在 Celery 中的对象会无限期地存在。
这是一个示例测试用例:
import json
from rest_framework.test import APITestCase
from myapp.models import MyModel
from myapp.util import get_result_from_response
class MyTestCase(APITestCase):
@classmethod
def setUpTestData(cls):
# This object is not visible to Celery
MyModel(id='test_object').save()
def test_celery_integration(self):
# This view spawns a Celery task
# Task should see MyModel.objects.get(id='test_object'), but can't
http_response = self.client.post('/', 'test_data', format='json')
result = get_result_from_response(http_response)
result.get() # Wait for task to finish before ending test case
# Objects saved by Celery task should be deleted, but persist
我有两个问题:
如何使 Celery 可以看到 Django 测试用例的对象?
如何确保 Celery 保存的所有对象在测试完成后自动回滚?
如果无法自动执行此操作,我愿意手动清理对象,但删除 tearDown 中的对象,即使是在 APISimpleTestCase 中似乎也会回滚。
【问题讨论】: