Python: unittest не распознает пакеты - PullRequest
0 голосов
/ 29 мая 2020

У меня есть приложение Flask, для которого я пытаюсь написать модульные тесты. Исходный код можно найти здесь , если кому-то нужен дополнительный контекст. Мой проект находится в папке с именем be и имеет такую ​​структуру:

├── __init__.py
├── app.py
├── api
│   ├── __init__.py
│   ├── auth
│   │   ├── __init__.py
│   │   ├── views.py
│   │   ├── tests
│   │   │   ├── __init__.py
│   │   │   ├── test_views.py

views.py содержит мои конечные точки /login и /register. Запуск моего сервера с flask run работает, и я могу успешно подключиться к этим конечным точкам. Однако запуск python -m unittest discover приводит к следующему выводу консоли:

(env) ➜  be git:(master) ./scripts test
python -m unittest
E
======================================================================
ERROR: api.auth.test.test_views (unittest.loader._FailedTest)
----------------------------------------------------------------------
ImportError: Failed to import test module: api.auth.test.test_views
Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/unittest/loader.py", line 434, in _find_test_path
    module = self._get_module_from_name(name)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/unittest/loader.py", line 375, in _get_module_from_name
    __import__(name)
  File "/Users/samscheding/projects/vue_tutorials/be/api/auth/test/test_views.py", line 4, in <module>
    from be.app import app
ModuleNotFoundError: No module named 'be'


----------------------------------------------------------------------
Ran 1 test in 0.000s

FAILED (errors=1)

Я написал только один тест, который в основном выглядит следующим образом:

import unittest
from be.app import app

app.testing = True

class TestLogin(unittest.TestCase):
    with app.test_client() as client:
       ... # Do some stuff with the test client

Мой текущий рабочий каталог находится внутри Папка be/, я запускаю Python3 .7.2 в той же виртуальной среде, в которой я запускаю flask run. Я нашел этот ответ StackOverflow, в котором было много информации, но главное, что он предлагает, - это добавить __init__.py в каждый каталог, что я и сделал. В другом ответе говорилось, что нужно добавить каталог в мой PYTHON_PATH, но я бы не стал этого делать, поскольку это дополнительная конфигурация, которую нужно настроить при клонировании в проект.

Я понимаю, что исключение создается в момент, когда я пытаюсь выполнить import be, но я не понимаю, почему flask run имеет контекст моего be пакета, а unittest - нет. т. Какая информация мне не хватает и какие решения есть?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...