ValueError: ни один модуль с именем notmigrations во время юнит-тестов - PullRequest
1 голос
/ 29 апреля 2019

У меня есть приложение 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()

1 Ответ

1 голос
/ 29 апреля 2019

Вы используете древний хак, предназначенный для действительно старых версий Django (<1.9), до того, как появилась поддержка отключения миграции при тестировании. Поскольку вы сейчас используете относительно свежую версию Django (2.1.7), удалите этот код из модуля настроек теста. </p>

Если вы хотите отключить миграции в тестах, используйте современный подход, который устанавливает значение None в MIGRATION_MODULES настройке .

Когда вы указываете None в качестве значения для приложения, Django будет рассматривать приложение как приложение без миграций, независимо от существующего субмодуля миграций. Это можно использовать, например, в файле настроек теста, чтобы пропустить миграции во время тестирования (таблицы все равно будут создаваться для моделей приложений).

# test_settings.py
from settings import *

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