测试Django的南迁移

时间:2012-01-10 05:16:58

标签: django django-south

有没有人知道在编写迁移本身之后的方法?很多次,在我的DataMigrations中,我发现了愚蠢的微妙错误,例如True而不是False的默认值,错误的非规范化等等。

默认的南方约定是使用数字开始迁移,因此您甚至无法在不使用__import__的情况下导入它们。有没有人提出类似的问题?人们如何解决这些问题?

最明显的方法是将迁移逻辑保存在一个单独的导入模块中并对其进行测试,但这有点笨拙。

2 个答案:

答案 0 :(得分:2)

我偶然发现了同样的问题。由于我没有找到对数据颜色进行测试的方法,因此我使用断言来检测损坏的数据:

from django.conf import settings

class MyModel(models.Model):
    stupid_error = models.BooleanField(default=False)

    def __init__(self, *args, **kwargs):
        super(MyModel, self).__init__(*args, **kwargs)
        if settings.DEBUG:
            assert not self.stupid_error

好的,它有点笨重。但似乎有效。

[编辑] 再次考虑它,我找到了一个更好的解决方案:将测试放入DataMigration本身。由于迁移是一次性代码,因此无需反复测试。

class Migration(DataMigration):
    def forwards(self, orm):
        # lots of awesome migration code here
        # ...
        for m in orm.MyModel.objects.all():
            assert not m.stupid_error

答案 1 :(得分:0)

我对南方很新,但是我用过它的几次,我也使用了单元测试,然后,。/ {{}}}也执行了迁移,这已经发现了很多错误。

但是,这可能并不适用于所有情况(我认为执行这些迁移时测试数据库中没有数据)。