2013-06-05 2 views
4

Я не могу импортировать мой модуль для тестирования так, как хотелось бы. Я бегу все это в virtualenv на 2.7.2Ошибка модуля Ошибка запуска py.test с модулями на пути

У меня есть структура каталогов, как

/api 
    /api 
     __init__.py 
     my_module.py 
    /tests 
     my_module_test.py 

У меня есть мой PYTHONPATH установлен/Path/API /. Я CD в/путь/апи и запустите следующую

py.test tests/my_module_test.py 

Это не работает в следующих случаях:

  1. Когда я следующий в верхней части my_module_test.py from api.my_module import my_function

Он работает в следующих случаях:

  1. Когда я следующий в верхней of my_module_test.py from my_module import my_function

Почему я не могу импортировать модуль, как в случае 1?

ответ

14

Я использую PYTHONPATH в

PYTHONPATH=`pwd` py.test tests/my_module_test.py 
2

Из py.text документа, вы должны установить первым .:

pip install -e . 
2

Я создал это как ответ на ваш вопрос и моя путаница , Я надеюсь, что это помогает. Обратите внимание на PYTHONPATH как в командной строке py.test, так и в tox.ini.

Пример проекта here, а также ниже:

mymodule.py:

import boto3 

def stuff(): 
    print "Yep!" 

tests/text_syntax_errors.py:

import boto3 
import mymodule 


# Define a basic test that actually doesn't do much. 
# I just wanted more than zero tests 
def test_one_equals_one(): 
    assert 1 == 1 

tox.ini:

[tox] 
skipsdist = True 
envlist = py27 

[flake8] 
max-line-length = 119 

[testenv] 
deps= -r{toxinidir}/requirements.txt 
commands=py.test 
setenv = 
    PYTHONPATH = {toxinidir} 

requirements.txt:

boto3 
pytest 

Из моих README.md:

Как-для запуска этих примеров

Моя первоначальная мотивация для проверки моего кода было то, что я неправильно импортированный модуль в скрипте, Я писал для работы.

Если вы отредактируете mymodule.py и удалите b с "boto3", вы увидите нижеприведенные команды. И это хорошо.Аналогично, если вы хотите увидеть фактический сбой теста, просто отредактируйте tests/test_syntax_errors.py и смените 1 == 1 на 1 == 0.

py.test

mbp0 pytest_test[master+*] $ PYTHONPATH=. py.test 
========================== test session starts ========================== 
platform darwin -- Python 2.7.11, pytest-2.9.2, py-1.4.31, pluggy-0.3.1 
rootdir: /Users/jmacdonald/w/pytest_test, inifile: 
collected 1 items 

tests/test_syntax_errors.py . 

======================= 1 passed in 0.11 seconds ======================== 
mbp0 pytest_test[master+*] $ 

токсикодендрон

mbp0 pytest_test[master+*] $ tox 
py27 installed: boto3==1.3.1,botocore==1.4.37,docutils==0.12,futures==3.0.5,jmespath==0.9.0,py==1.4.31,pytest==2.9.2,python-dateutil==2.5.3,six==1.10.0 
py27 runtests: PYTHONHASHSEED='713732044' 
py27 runtests: commands[0] | py.test 
========================== test session starts ========================== 
platform darwin -- Python 2.7.11, pytest-2.9.2, py-1.4.31, pluggy-0.3.1 
rootdir: /Users/jmacdonald/w/pytest_test, inifile: 
collected 1 items 

tests/test_syntax_errors.py . 

======================= 1 passed in 0.11 seconds ======================== 
________________________________ summary ________________________________ 
    py27: commands succeeded 
    congratulations :) 
mbp0 pytest_test[master+*] $ 
+0

Вы не можете разместить свой код здесь – Damirchi

+0

Это один из первых моих ответов на StackOverflow. Можете ли вы рассказать о том, что вы имеете в виду? Мой код является конкретным ответом на этот вопрос. Это слишком сложно, чтобы размещать в текстовой области. –

+0

@JeffMacDonald есть специальное форматирование кода, вы можете использовать его! :) – gofr1