У меня есть приложение 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
- нет. т. Какая информация мне не хватает и какие решения есть?