运行单元测试时禁用 Django South?

Posted

技术标签:

【中文标题】运行单元测试时禁用 Django South?【英文标题】:Disable Django South when running unit tests? 【发布时间】:2011-08-13 11:54:42 【问题描述】:

在在进行 django 单元测试时如何避免运行所有的南迁移?

【问题讨论】:

我想知道为什么这很重要?执行测试时,它正在测试数据库上运行此迁移。虽然如果你从 INSTALLED_APPS 中删除 south,你可以阻止运行它的测试。 @Torsten 我有一个需要这样做的用例:我有一个第 3 方模块,它的模型带有 ForigenKey 到我的 User 类。但是,我的User 中有一个自定义 pk 字段。因此,当我运行测试并运行此第 3 方模块的 0001_initial 迁移时,它会在测试数据库中创建一个约束,并在 user 表中使用错误的字段名称。这就是为什么我需要在运行单元测试时关闭迁移。 【参考方案1】:

是的,South documentation 描述了如何做到这一点,但基本上只需将其添加到您的 settings.py 文件中:

SOUTH_TESTS_MIGRATE = False # To disable migrations and use syncdb instead
SKIP_SOUTH_TESTS = True # To disable South's own unit tests

【讨论】:

这不会禁止 south 运行迁移,它只会显示 south 运行自己的单元测试。请参阅 Kiddouck 的帖子,了解如何在进行 django 单元测试时禁用所有南迁移。 感谢@ephesian,已修复。【参考方案2】:

尽管您选择了好的答案,但我认为您应该考虑使用 SOUTH_TESTS_MIGRATE 选项。它将阻止在您的测试数据库上运行所有迁移,而是运行syncdb

【讨论】:

以上是关于运行单元测试时禁用 Django South?的主要内容,如果未能解决你的问题,请参考以下文章

如何对 Django South“数据迁移”进行单元测试

运行单元测试时禁用winston日志记录?

从 1.5 迁移到 1.7 时的单元测试警告

运行时单元测试 Django Rest Framework 身份验证

每次运行时都没有创建测试数据库的 Django 单元测试

暂时禁用单个 Python 单元测试