Настройка pytest-django и pre-commit в проекте Django
У меня есть проект Django со следующей конструкцией:
.
├── db.sqlite3
├── manage.py
├── switch
│ ├── __init__.py
│ ├── settings.py
├── store
│ ├── __init__.py
│ ├── admin.py
│ ├── apps.py
│ ├── tests
| | ├── __init__.py
| | ├── tests.py
│ ├── apps.py
│ ├── migrations
│ ├── urls.py
│ └── views.py
├── .pre-commit-config.yaml
└── pytest.ini
Моим автором является test.ini:
[pytest]
DJANGO_SETTINGS_MODULE = store.settings
python_files = tests.py tests_*.py *_tests.py
Файл предварительной коммисии.yaml:
exclude: "^docs/|/migrations/"
default_stages: [commit]
repos:
- repo: local
hooks:
- id: pytest-check
name: pytest-check
entry: pytest
language: system
pass_filenames: false
always_run: true
При локальном запуске тестов pytest
все работает без ошибок.
При локальном выполнении пре-коммита pre-commit run --color=always --all-files
все работает без ошибок.
При попытке фиксации возникает ошибка:
django.core.exceptions.ImproperlyConfigured: Requested setting INSTALLED_APPS, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.
Если добавить принудительную установку переменной окружения в тестовый файл с путем к файлу настроек и вызвать django.config(), то проблема решается.
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), "..")))
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "store.settings")
django.setup()
Но я думаю, что это неправильный путь и есть другое, более оптимальное решение. Пожалуйста, помогите мне. Спасибо