在测试用例中使用django-reversion时如何为测试对象创建初始修订版

时间:2014-09-16 08:48:27

标签: python django unit-testing django-reversion

我在玩django-revisions时创建了一些初始测试。我希望能够测试我的一些api和查看代码是否正确保存了修订版。但是,我甚至无法进行基本测试以保存已删除的版本。

import reversion
from django.db import transaction
from django import test
from myapp import models

class TestRevisioning(test.TestCase):
    fixtures = ['MyModel']
    def testDelete(self):
        object1 = models.MyModel.objects.first()
        with transaction.atomic():
             with reversion.create_revision():
                 object1.delete()
        self.assertEquals(reversion.get_deleted(models.MyModel).count(), 1)

使用以下命令检查已删除的QuerySet的长度时失败:

AssertionError: 0 != 1

我的假设是我需要创建模型的初始修订版(相当于./manage.py createinitialrevisions)。如果这是问题,我如何在测试中创建初始修订?如果这不是问题,我还能尝试什么?

2 个答案:

答案 0 :(得分:4)

所以,解决方案非常简单。我将我的对象保存在版本控制之下。

# imports same as question

class TestRevisioning(test.TestCase):
    fixtures = ['MyModel']

    def testDelete(self):
        object1 = models.MyModel.objects.first()
        # set up initial revision
        with reversion.create_revision():
            object1.save()
        # continue with remainder of the test as per the question.
        # ... etc.

我试图覆盖_fixture_setup(),但这不起作用。另一种选择是循环遍历__init__()中的MyModel对象,将其保存在reversion控制之下。

答案 1 :(得分:0)

'为MyModel'是你的灯具文件的名称? 如果没有,你可能缺少的是数据创建。

您可以使用灯具(但不是模型的名称)或工厂。

Django文档中有一整章涉及为模型提供数据库初始数据:https://docs.djangoproject.com/en/1.7/howto/initial-data/

希望有所帮助