Прошу прощения, если название занимает некоторое время, чтобы понять. Итак, вот структура папок:
falcon_tut/
falcon_tut/
app.py
images.py
__init__.py
tests/
test_app.py
__init__.py
И некоторые коды
####################
# app.py
####################
from images import Resource
images = Resource()
api = application = falcon.API()
api.add_route('/images', images)
# ... few more codes
####################
# test_app.py
####################
import falcon
from falcon import testing
import ujson
import pytest
from falcon_tut.app import api
@pytest.fixture
def client():
return testing.TestClient(api)
def test_list_images(client):
doc = {
'images': [
{
'href': '/images/1eaf6ef1-7f2d-4ecc-a8d5-6e8adba7cc0e.png'
}
]
}
response = client.simulate_get('/images')
result_doc = ujson.loads(response.content)
assert result_doc == doc
assert response.status == falcon.HTTP_OK
Отлично работает при работе с python falcon_tut/app.py
и скручивает его с откликом 200
и полезной нагрузкой изображений
До запуска pytest tests/
из корня проекта выводит это:
ImportError while importing test module ../falcon_tut/tests/test_app.py
Hint: make sure your test modules/packages have valid Python names.
Traceback:
tests/test_app.py:6: in <module>
from falcon_tut.app import api
E ModuleNotFoundError: No module named 'falcon_tut'
Я пытался создать __init__.py
в корне проекта, но все равно выдает ту же ошибку выше
Python версии 3.7.0, с соколом 1.4.1, cpython 0.28.5, pytest 3.7.3, и вместо gunicorn я использую bjoern 2.2.2
Я пробую среду разработки Python Falcon и сталкиваюсь с ошибкой в части тестирования.
========== UPDATE ===========
Причина, по которой pytest
не удалось найти модуль, заключается в том, что sys.path
не имеет ../falcon_tut/falcon_tut
.
Когда я запустил pytest
и отредактировал эти 2 файла и распечатал sys.path
, он имеет только [../falcon_tut/tests, ../falcon_tut, ..]
. Обходной путь к этому должен добавить путь к пакету к sys.path
. Так вот отредактировано app.py
#############
# app.py
#############
import sys
# this line is just example, please rewrite this properly if you wants to use this workaround
# sys_path[1] only applied to my situation, again this is just example to know that it works
# the idea is to make sure the path to your module exists in sys.path
# in this case, I appended ../falcon_tut/falcon_tut to sys.path
# so that now ../falcon_tut/falcon_tut/images.py can be found by pytest
sys.path.insert(0, '{}/falcon_tut'.format(sys_path[1]))
# body codes...