本站消息

  出租广告位,需要合作请联系站长

  今日名言-想象你自己对困难作出的反应,不是逃避或绕开它们,而是面对它们,同它们打交道,以一种进取的和明智的方式同它们奋斗 。——马克斯威尔·马尔兹

  今日名言-用谅解、宽恕的目光和心理看人、待人。人就会觉得葱笼的世界里,春意盎然,到处充满温暖。——蔡文甫


+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

在 Django 1.7 中运行单元测试时禁用迁移

发布于2021-07-24 21:26     阅读(1290)     评论(0)     点赞(23)     收藏(4)


Django 1.7引入了数据库迁移

在 Django 1.7 中运行单元测试时,它会强制执行migrate,这需要很长时间。所以我想跳过 django 迁移,并在最终状态下创建数据库。

我知道忽略迁移可能是一种不好的做法,因为不会测试该部分代码。但事实并非如此:我正在 CI 测试服务器 (jenkins) 中运行完整迁移。我只想跳过本地测试中的迁移,在那里速度很重要。


一些背景:

直到 Django 1.6,当使用 South 时,我使用了SOUTH_TESTS_MIGRATE设置:

默认情况下,如果 South 的 syncdb 命令在非交互模式下运行,它也会应用迁移,这包括您运行测试的时间 - 每次运行测试时它都会运行每次迁移。

如果您希望测试运行程序使用 syncdb 而不是 migrate - 例如,如果您的迁移花费的时间太长而无法应用 - 只需在 settings.py 中设置 SOUTH_TESTS_MIGRATE = False。

但是,syncdb不再存在,现在是migrate

从 Django 1.8 开始,我将使用--keepdb参数:

--keepdb 选项可用于在测试运行之间保留测试数据库。这具有跳过创建和销毁操作的优势,这大大减少了运行测试的时间,尤其是在大型测试套件中的测试。如果测试数据库不存在,它将在第一次运行时创建,然后为每次后续运行保留。在运行测试套件之前,任何未应用的迁移也将应用于测试数据库。

所以这个问题仅限于Django 1.7。


解决方案


看看这个由 Bernie Sumption 发布到 Django 开发人员邮件列表的解决方法

如果尚未运行 makemigrations,“迁移”命令会将应用程序视为未迁移,并直接从模型创建表,就像 1.6 中的 syncdb 一样。我为名为“settings_test.py”的单元测试定义了一个新的设置模块,它从主设置模块导入 * 并添加以下行:

MIGRATION_MODULES = {"myapp": "myapp.migrations_not_used_in_tests"}

然后我运行这样的测试:

DJANGO_SETTINGS_MODULE="myapp.settings_test" python manage.py test

这个傻瓜迁移到认为应用程序未迁移,因此每次创建测试数据库时,它都会反映models.py的当前结构。

在 Django 1.9 中,这种情况有所改善,您可以将值设置为None

MIGRATION_MODULES = {"myapp": 无}



所属网站分类: 技术文章 > 问答

作者:官方问答小能手

链接:http://www.pythonpdf.com/blog/article/253/eb646723acadbc4dba31/

来源:编程知识网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

23 0
收藏该文
已收藏

评论内容:(最多支持255个字符)