Подскажите как настроить tortoise-orm в fastapi для тестирования с pytest?

Правильно ли я понимаю концепцию: У fastapi есть основная БД и во время запуска тестов(pytest) она должна меняться на тестовую и в ней будут создаваться таблицы, а после окончания тестов все таблицы удалятся.

Во многих местах дается такой пример:

@pytest.fixture(scope="session", autouse=True)
async def initialize_db() -> AsyncGenerator[None, None]:
    """
    Initialize models and database.

    :yields: Nothing.
    """
    initializer(
        MODELS_MODULES,
        db_url=str(settings.db_url),
        app_label="models",
    )
    await Tortoise.init(config=TORTOISE_CONFIG)

    yield

    await Tortoise.close_connections()
    finalizer()

Но здесь не понятно как у приложения fastapi будет меняться БД на тестовую. И нужно ли в самом приложении fastapi в конфиге tortoise добавлять новое подключение:

TORTOISE_CONFIG = {  # noqa: WPS407
    "connections": {
        "default": str(settings.db_url),
    },
    "apps": {
        "models": {
            "models": MODELS_MODULES + ["aerich.models"],
            "default_connection": "default",
        },
    },
}

Как правильно это настроить? Сейчас при запуске тестов, такая ошибка:

def result(self):
    if self._state == _CANCELLED:
        exc = self._make_cancelled_error()
        raise exc
    if self._state != _FINISHED:
        raise exceptions.InvalidStateError('Result is not ready.')
    self.__log_traceback = False
    if self._exception is not None:
        raise self._exception

E           asyncpg.exceptions.ObjectInUseError: database "efmarketplacetest" is being accessed by other users      
E           DETAIL:  There is 1 other session using the database.

Ответы (0 шт):