pytest возвращает ModuleNotFoundError, когда модуль, импортированный в тестовый файл, импортирует другой модуль в том же каталоге импортируемого модуля - PullRequest
0 голосов
/ 28 августа 2018

Прошу прощения, если название занимает некоторое время, чтобы понять. Итак, вот структура папок:

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...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...