首页 > 解决方案 > ValueError:单元测试期间没有名为“notmigrations”的模块

问题描述

我有 django 应用程序 2.1.7 和 django-tenant 插件(在数据库中为 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()

标签: pythondjangounit-testingmulti-tenantdjango-unittest

解决方案


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

如果您想在测试中禁用迁移,请使用现代方法,将值放入NonesetMIGRATION_MODULES

当您None为应用程序提供值时,无论现有的迁移子模块如何,Django 都会将该应用程序视为没有迁移的应用程序。例如,这可以在测试设置文件中用于在测试时跳过迁移(仍将为应用程序的模型创建表)。

# test_settings.py
from settings import *

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

推荐阅读