ValueError:单元测试期间没有名为“ notmigrations”的模块

时间:2019-04-28 21:42:08

标签: python django unit-testing multi-tenant django-unittest

我有带有django-tenant插件的django应用程序2.1.7(在数据库中为saas创建模式)。

我的问题是单元测试。我运行命令: python manage.py test --settings=project.settings_test 并且出现错误:ImportError: No module named 'notmigrations'

我在settings_test文件中的代码

from .settings_base import *


class DisableMigrations(object):
    def __contains__(self, item):
        return True

    def __getitem__(self, item):
        return 'notmigrations'

MIGRATION_MODULES = DisableMigrations()

1 个答案:

答案 0 :(得分:1)

从支持测试禁用迁移开始,您就使用了针对Django真正旧版本(<1.9)的古老hack。由于您现在使用的是相对较新版本的Django(2.1.7),因此请从测试设置模块中删除该代码。

如果要在测试中禁用迁移,请使用the modern approach, which is putting the value to None in MIGRATION_MODULES setting

  

当您提供None作为应用程序的值时,Django会将该应用程序视为不进行迁移的应用程序,而与现有的迁移子模块无关。例如,可以在测试设置文件中使用它来跳过测试过程中的迁移(仍然会为应用程序的模型创建表)。

# test_settings.py
from settings import *

MIGRATION_MODULES = {
    'auth': None,
    'contenttypes': None,
    'sessions': None,
    ...
    'myapp1': None,
    'myapp2': None,
}