Таблица уже существует, когда я запускаю pytest на проекте Django

У меня есть проект Django версии 3.2.5.

Я создал новую модель: app.model. Затем я выполнил python manage.py makemigrations app команду.

Когда я запустил тесты через pytest, я получил следующие ошибки:

E               psycopg2.errors.DuplicateTable: relation "app_model" already exists
E               django.db.utils.ProgrammingError: relation "app_model" already exists

Однако такой таблицы нет ни в моей локальной базе данных, ни в тестовой базе данных, созданной с нуля.

Я разместил свой код в ветке на Github, и сборка прошла без проблем. Однако мой тестовый пакет жаловался на существующую таблицу. Я выполнил python manage.py migrate app и все заработало.

Я понял, что это проблема, вызванная использованием pytest с аргументом --reuse-db. В этом случае он не просит вас удалить бесхозную тестовую базу данных, а использует ее повторно.

Вместо использования pytest, когда я запускаю python manage.py test, я получаю следующее сообщение:

Введите "yes", если вы хотите попробовать удалить тестовую базу данных "test_project", или "no" для отмены: Возникла ошибка при создании тестовой базы данных: база данных "test_project" уже существует

Я набрал yes, сиротская база данных test_project была удалена и создана заново, и ошибки исчезли.

Другим решением может быть использование --create-db с pytest command или добавление этой опции в pytest.ini файл.

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