Я получаю странные ошибки, когда вызов ./manage.py test
найдет мои тесты, но жалуется, что они не могут быть импортированы.
Версия
Python 3.4
Django 1.7b4
Моя файловая структура
выглядит так (только соответствующие биты):
inkasso
├── db.sqlite3
├── functional_tests
│ ├── base.py
│ ├── base.pyc
│ ├── __init__.py
│ ├── __init__.pyc
│ ├── __pycache__
│ ├── test_login.py
│ └── test_login.pyc
├── __init__.py
├── inkasso
│ ├── __init__.py
│ ├── __init__.pyc
│ ├── migrations
│ ├── models.py
│ ├── settings.py
│ ├── settings.pyc
│ ├── urls.py
│ └── wsgi.py
├── manage.py
├── static
│ ├── ...
├── templates
│ ├── ...
└── web
├── admins.py
├── tests
│ ├── __init__.py
│ ├── test_forms.py
│ ├── test_models.py
│ └── test_views.py
├── urls.py
└── views.py
Трассировка стека
Поэтому, когда я запускаю ./manage.py test
, я получаю следующий stak-trace:
$ ./manage.py test
Creating test database for alias 'default'...
EEEE
======================================================================
ERROR: inkasso.functional_tests.test_login (unittest.loader.ModuleImportFailure)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/usr/lib/python3.4/unittest/case.py", line 57, in testPartExecutor
yield
File "/usr/lib/python3.4/unittest/case.py", line 574, in run
testMethod()
File "/usr/lib/python3.4/unittest/loader.py", line 32, in testFailure
raise exception
ImportError: Failed to import test module: inkasso.functional_tests.test_login
Traceback (most recent call last):
File "/usr/lib/python3.4/unittest/loader.py", line 312, in _find_tests
module = self._get_module_from_name(name)
File "/usr/lib/python3.4/unittest/loader.py", line 290, in _get_module_from_name
__import__(name)
ImportError: No module named 'inkasso.functional_tests'
======================================================================
ERROR: inkasso.web.tests.test_forms (unittest.loader.ModuleImportFailure)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/usr/lib/python3.4/unittest/case.py", line 57, in testPartExecutor
yield
File "/usr/lib/python3.4/unittest/case.py", line 574, in run
testMethod()
File "/usr/lib/python3.4/unittest/loader.py", line 32, in testFailure
raise exception
ImportError: Failed to import test module: inkasso.web.tests.test_forms
Traceback (most recent call last):
File "/usr/lib/python3.4/unittest/loader.py", line 312, in _find_tests
module = self._get_module_from_name(name)
File "/usr/lib/python3.4/unittest/loader.py", line 290, in _get_module_from_name
__import__(name)
ImportError: No module named 'inkasso.web'
======================================================================
ERROR: inkasso.web.tests.test_models (unittest.loader.ModuleImportFailure)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/usr/lib/python3.4/unittest/case.py", line 57, in testPartExecutor
yield
File "/usr/lib/python3.4/unittest/case.py", line 574, in run
testMethod()
File "/usr/lib/python3.4/unittest/loader.py", line 32, in testFailure
raise exception
ImportError: Failed to import test module: inkasso.web.tests.test_models
Traceback (most recent call last):
File "/usr/lib/python3.4/unittest/loader.py", line 312, in _find_tests
module = self._get_module_from_name(name)
File "/usr/lib/python3.4/unittest/loader.py", line 290, in _get_module_from_name
__import__(name)
ImportError: No module named 'inkasso.web'
======================================================================
ERROR: inkasso.web.tests.test_views (unittest.loader.ModuleImportFailure)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/usr/lib/python3.4/unittest/case.py", line 57, in testPartExecutor
yield
File "/usr/lib/python3.4/unittest/case.py", line 574, in run
testMethod()
File "/usr/lib/python3.4/unittest/loader.py", line 32, in testFailure
raise exception
ImportError: Failed to import test module: inkasso.web.tests.test_views
Traceback (most recent call last):
File "/usr/lib/python3.4/unittest/loader.py", line 312, in _find_tests
module = self._get_module_from_name(name)
File "/usr/lib/python3.4/unittest/loader.py", line 290, in _get_module_from_name
__import__(name)
ImportError: No module named 'inkasso.web'
----------------------------------------------------------------------
Ran 4 tests in 0.001s
FAILED (errors=4)
Destroying test database for alias 'default'...
Итак, тестовый бегун находит мои тесты, но по какой-то причине они не импортируются. Я понятия не имею, что происходит. Трассировка стека не очень помогает мне: (
Поскольку корневая папка называется inkasso
и имеет модуль с тем же именем, я попытался помещать print(os.getcwd)
и print(sys.path)
в manage.py, и все, что было показано, это то, что CWD и path были установлены как укажите в корневой папке, так что все должно быть хорошо, нет? Само приложение работает так, как ожидалось. Это только те тесты, которые не работают.
Для хихиканья я попытался создать пустой модуль "web" в inkasso.inkasso, в результате чего вместо жалобы на то, что inkasso.web не существует, он теперь жалуется, что inkasso.web.tests не существует. Таким образом, это показывает, что вместо поиска в корневой папке "inkasso" она выглядит в "inkasso.inkasso". Вот в чем проблема. Как я могу это исправить?