【发布时间】:2017-05-02 07:22:21
【问题描述】:
我试过写a test on specific migration files。基本上我想测试数据库的当前状态和一对迁移之间的数据。我使用MigrationExecutor如下:
executor = MigrationExecutor(connection)
old_apps = executor.loader.project_state(self.migrate_from).apps
executor.migrate(self.migrate_from)
# do something here
executor.migrate(self.migrate_to)
我们的项目中有很多迁移文件,因此使用单元测试运行所有这些文件需要很长时间。通常,我会在settings_test.py 中将迁移模块设置为None:
MIGRATION_MODULES: {
'my_app': None
}
使用此设置,测试将运行得非常快。问题是无法再找到要测试的迁移文件(self.migrate_from 和self.migrate_to):
django.db.migrations.exceptions.NodeNotFoundError: Node ('poleluxe', '0090_auto_previous_migration') not a valid node
所以我不得不在测试中再次包含迁移模块。
有没有办法在不运行所有迁移文件的情况下包含迁移文件?就我而言,我想跳过从0001 到0089 的所有迁移,只运行0090(如self.migration_from)和0091(如self.migrate_to)。
我正在考虑压缩前 89 个迁移并将结果与 0090 和 0091 一起放在一个单独的文件夹中,然后在测试中引用该迁移文件夹。但是,我不确定这是否是一个很好的解决方案。
【问题讨论】:
-
您阅读过caktusgroup.com/blog/2016/02/02/… 进行此类测试吗?
-
是的。事实上,我已经在帖子中包含了那个。
标签: python django unit-testing