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

标签 python django unit-testing django-reversion

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

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 等效的操作)。如果这是问题所在,我如何在我的测试中创建初始修订?如果这不是问题,我还能尝试什么?

最佳答案

因此,解决方案非常简单。我将我的对象保存在修订控制下。

# 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 对象,将它们保存在恢复控制之下。

关于python - 在测试用例中使用 django-reversion 时如何为测试对象创建初始修订,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25864370/

相关文章:

python - Pandas 日期时间格式

python - Django ImageField 在模板中显示绝对 Linux 路径

django - 如何在render_to_string助手中设置语言?

c# - Release模式下的测试未使用 Shimmed 方法

c# - 基本单元测试与单元测试

node.js - 使用 Jest 模拟 Express Controller 内的 fs.existsSync

python - 如何解决 "ValueError: A ` Concatenate` 层需要具有匹配形状的输入(除了连接轴之外)”?

Python 不考虑 distutils.cfg

python - 如何在Jupyter笔记本中转到函数的定义?

Django - 两种不同类型用户的信号