Не удается проверить миграции django из теста, но они работают из команды django

Я хочу иметь возможность проверять миграции Django внутри теста (чтобы я мог проверить базовую вменяемость перед запуском более обширных тестов).

Для этого я смог сделать следующее в команде django:

from django.core.management.base import BaseCommand

from django.db.migrations.loader import MigrationLoader


class Command(BaseCommand):
    help = "Check migrations"

    def handle(self, *args, **options):
        self.migration_loader = MigrationLoader(None)
        self.migration_loader.build_graph()
        for root_node in self.migration_loader.graph.root_nodes():
            print(app_name, root_node[0])

Но когда я перевожу это в тест (используя pytest):

from django.db.migrations.loader import MigrationLoader
def test_multiple_leaf_nodes_in_migration_graph():
        migration_loader = MigrationLoader(None)
        migration_loader.build_graph()
        for root_node in migration_loader.graph.root_nodes():
            print(app_name, root_node[0])

Тогда граф (корневые узлы) возвращает пустой список. Нужно ли что-то сделать, чтобы я мог "увидеть" миграции в тесте?

pytest --no-migrations

Поскольку вы отключили миграции, MigrationLoader не будет загружать миграции.

Чтобы загрузить миграции, вы можете переопределить настройки для MIGRATION_MODULES только для этого теста:

from django.test import override_settings


@override_settings(MIGRATION_MODULES={})  # Add this
def test_multiple_leaf_nodes_in_migration_graph():
    ...
Вернуться на верх