Python coverage - указать рабочий каталог

У меня есть приложение django под названием edison с несколькими django-apps в нем. Я запускаю тесты на них, используя покрытие:

coverage run --source='.' edison/manage.py test application_one
coverage run --source='.' edison/manage.py test application_two
...

Структура моего репозитория такова:

-- edison [the repo name]
    -- edison [a django application]
    -- schuedled_jobs
    -- internal_packages

В моих файлах тестов я импортирую материал из каталога internal_packages, и когда я запускаю команды покрытия, я получаю ошибку ModuleNotFoundError: No module named 'internal_packages'. Мой вопрос: как мне изменить рабочий каталог coverage на корневой каталог, чтобы он распознавал все модули?

Это, вероятно, решит вашу проблему. Это просто добавит каталог репозитория в системный путь, чтобы python мог найти то, что вы запрашиваете.

import sys, os

rel = os.path.join(os.getcwd(), '../')
if not rel in sys.path:
    sys.path.append(rel)

from internal_packages import some_module

Это дает более чистый путь, чем относительная версия в приведенном выше примере

rel = '/'.join(os.getcwd().split('/')[0:-1])

Я полагаю, что это также можно решить, создав соответствующий __init__.py файл для ваших модулей.

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