Django подключает Signal, но приложения нет в INSTALLED_APPS

У меня есть два приложения Django, foo и bar, которые оба указаны в настройках INSTALLED_APPS. foo посылает сигнал, который получает bar. Я хочу протестировать foo. Поэтому я хочу изолировать его, т.е. bar не должен прослушивать сигнал.

Обычно bar подключается к сигналу с помощью метода AppConfig.ready():

class BarConfig(AppConfig):
    def ready(self):
        from foo.signals import foo_signal
        from .signals import handle_foo_signal

        foo_signal.connect(handle_foo_signal)

В тестовом коде я удаляю bar из настройки INSTALLED_APPS, используя декоратор @modify_settings():

@modify_settings(INSTALLED_APPS=dict(remove=["bar"]))
def test_foo(self):
    ...test code...

Я ожидал, что bar не будет слушать сигнал. Однако он слушает.

Я знаю, что могу отключить каждый сигнал. Но я ищу способ временно "удалить" приложение полностью. Есть ли способ легко изолировать приложения и их приемники сигналов?

Я отладил код и обнаружил, что приложение bar все еще находится в INSTALLED_APPS при вызове ready(). Я ожидал, что конфигурация приложения не будет вызвана вообще.

Вернуться на верх