Подскажите как настроить 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.