【问题标题】:How to create initial revision for test objects when using django-reversion in test case在测试用例中使用 django-reversion 时如何为测试对象创建初始修订
【发布时间】:2014-09-16 08:48:27
【问题描述】:

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

【问题讨论】:

    标签: python django unit-testing django-reversion


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      你可以使用fixtures(但是一个文件,而不是你的模型的名字)或者工厂。

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

      希望对你有帮助

      【讨论】:

      • MyModel 对象已从其夹具 (MyModel.json) 正确加载。如果不是,models.MyModel.objects.first() 将返回 Noneobject1.delete() 将引发 AttributeError
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-09
      • 2021-09-10
      • 1970-01-01
      • 2023-03-20
      相关资源
      最近更新 更多