【发布时间】:2016-05-12 04:04:17
【问题描述】:
我们使用 django 迁移 (django v1.7+) 更改了我们的数据库。 数据库中存在的数据不再有效。
基本上我想通过在单元测试中构建迁移前数据库,添加一些数据,应用迁移,然后确认一切顺利来测试迁移。
怎么做的:
-
在加载单元测试时阻止新的迁移
我找到了 some stuff 关于覆盖
settings.MIGRATION_MODULES但不知道如何使用它。当我检查executor.loader.applied_migrations时,它仍然列出了所有内容。我可以阻止新迁移的唯一方法是实际删除文件;不是我可以使用的解决方案。 -
在 unittest 数据库中创建一条记录(使用旧模型)
如果我们可以阻止迁移,那么这应该非常简单。
myModel.object.create(...) -
应用迁移
我想我现在已经找到了test_executor:设置一个指向迁移文件的计划并执行它,我想我可能可以解决这个问题?嗯,对吧?有任何代码:-D
-
确认数据库中的旧数据现在与新模型匹配
同样,我希望这应该很容易:只需获取迁移前创建的实例并确认它已以所有正确的方式更改。
所以真正的挑战是如何防止单元测试应用最新的迁移脚本,然后在我们准备好时应用它?
也许我的方法有误?我应该创建固定装置,并确认它们最后都很好吗?固定装置是在应用迁移之前加载还是在它们全部完成之后加载?
通过使用MigrationExecutor 并使用.migrate 选择特定迁移,我已经能够,也许?,将其回滚到特定状态,然后一个接一个地前滚。但这引发了质疑。由于缺少实际的 ALTER TABLE 指令,目前正在追查 sqlite 捏造的东西。陪审团仍未出局。
【问题讨论】:
-
版本控制系统可能会在这种情况下有所帮助。您将需要维护两个具有旧迁移和新迁移的分支。它看起来类似于您为具有不同设置、代码等的生产和开发环境有单独的分支的情况。
-
@xyres 检查各种提交通常不属于单元测试的范围。
标签: django django-models django-unittest