Почему я могу найти pyt-django manage.py? - PullRequest
0 голосов
/ 09 февраля 2019

У меня есть такая структура проекта:

setup.cfg
integration_tests/
  |----tests.py
src/
  |----manage.py
  |----my_django_app/

И файл setup.cfg с этим:

[tool:pytest]
addopts=--tb=short --strict -ra
DJANGO_SETTINGS_MODULE = my_django_app.settings
env = 
    APP_ENV=testing
    USE_SQLITE_DB=True

Но когда я перехожу к вершине этой структуры каталогов и запускаюpytest, я получаю следующее:

"pytest-django не может найти проект Django (файл manage.py не может быть найден). Вы должны явно добавить свой проект Django в путь Python, чтобы иметь егоПоднято. "

Если вместо этого перейти к /src/ и запустить pytest, тесты будут выполняться без проблем, хотя, очевидно, поскольку я не достиг уровня, ни один из тестов на интеграцию не запустится.

В соответствии с документацией, похоже, что вам нужно детализировать с того места, где вы запускаете pytest, чтобы попытаться найти manage.py: https://pytest -django.readthedocs.io / en / latest / manage_python_path.html #автоматический поиск проектов django

Если это не так, то есть ли способ настроить параметр в файле setup.cfg для добавления src/ в PYTHONPATH?Предложение в doc установить src/ в редактируемом режиме с использованием pip в нашей среде не совсем корректно.

1 Ответ

0 голосов
/ 09 февраля 2019

Вы можете использовать pytest-pythonpaths плагин для pytests.

Пример:

[pytest] 
python_paths = your/path/apps your/path/libs

В вашем конкретном случае:

[tool:pytest]
addopts=--tb=short --strict -ra
DJANGO_SETTINGS_MODULE = my_django_app.settings
env = 
    APP_ENV=testing
    USE_SQLITE_DB=True
python_paths = src

Почему manage.py не может быть найден?

Сначала посмотрите, кто делает обнаружение тестов pytest.

Соглашения для обнаружения тестов Python

pytest реализует следующее стандартное обнаружение тестов:

  • Если аргументы не указаны, сбор данных начинается с testpaths (если настроен) или текущего каталога.В качестве альтернативы аргументы командной строки могут использоваться в любой комбинации каталогов, имен файлов или идентификаторов узлов.

  • Рекурсировать в каталоги, если они не соответствуют norecursedirs.В этих каталогах найдите тестовые файлы _ *. Py или * _test.py, импортированные по имени их пакета теста.

  • Из этих файлов соберите элементы теста: тестируйте префиксные функции или методы теставне класса test с префиксом тестовых функций или методов внутри Test с префиксом тестовых классов (без метода init )

Таким образом, manage.py не квалифицируются какследовательно, тестовый файл не обнаруживается автоматически, он необходим в пути python для запуска ваших тестов.

...