因此,在开始一个项目并且在初始提交之前没有正确设置我的源代码控制的愉快传统中,我已经离开并破坏了我的 Django 测试运行器。 PATH 似乎在某处搞砸了,所以这可能不是 Django 特有的问题。
我可以成功运行 django 开发服务器并且所有项目功能都可以正常工作。我在项目中可能有 70 个测试曾经有效,直到在某个时候我引入了一些使它们无效的东西。
错误:
======================================================================
ERROR: app.group.tests (unittest.loader.ModuleImportFailure)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/Users/Jamie/.pyenv/versions/3.4.1/lib/python3.4/unittest/case.py", line 58, in testPartExecutor
yield
File "/Users/Jamie/.pyenv/versions/3.4.1/lib/python3.4/unittest/case.py", line 577, in run
testMethod()
File "/Users/Jamie/.pyenv/versions/3.4.1/lib/python3.4/unittest/loader.py", line 32, in testFailure
raise exception
ImportError: Failed to import test module: app.group.tests
Traceback (most recent call last):
File "/Users/Jamie/.pyenv/versions/3.4.1/lib/python3.4/unittest/loader.py", line 312, in _find_tests
module = self._get_module_from_name(name)
File "/Users/Jamie/.pyenv/versions/3.4.1/lib/python3.4/unittest/loader.py", line 290, in _get_module_from_name
__import__(name)
ImportError: No module named 'app.group'
检查标准:
(venv) Jamies-MacBook-Pro:app Jamie$ python3
Python 3.4.1 (default, Jun 30 2015, 16:47:23)
[GCC 4.2.1 Compatible Apple LLVM 6.1.0 (clang-602.0.53)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.path
['', '/Users/Jamie/.pyenv/versions/3.4.1/lib/python34.zip', '/Users/Jamie/.pyenv/versions/3.4.1/lib/python3.4', '/Users/Jamie/.pyenv/versions/3.4.1/lib/python3.4/plat-darwin', '/Users/Jamie/.pyenv/versions/3.4.1/lib/python3.4/lib-dynload', '/Users/Jamie/.pyenv/versions/venv/lib/python3.4/site-packages']
没有明显的东西可以扰乱 PATH,我已经到了我有很多无法部署的未经测试的功能(以及即将发布的日期)的阶段。有什么想法吗?
请您参考如下方法:
所以在深入研究之后,发现 Django Test Runner 有一个已知的警告。如果根项目文件夹中有 dunder-init,则会出现此问题。违规的罪魁祸首是下面的第一个文件:
jamiestrauss@jamies-air-2:~/projects/app$ tree
.
├── __init__.py
├── app
│ ├── __init__.py
│ ├── celery.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── client
│ ├── __init__.py
│ ├── admin.py
│ ├── api.py
│ ├── migrations
当然,manage.py中Shebang!的存在,再加上dunder-init,意味着整个应用都是作为一个模块导入的,这就乱七八糟了上内参。
tl;dr - 如果发生这种情况,请删除 /project/ 目录中的根 __init__.py。
