运行django教程testing失败 – 没有名为polls.tests的模块
我正在玩django 1.6教程,但我不能运行testing。 我的项目(名称mydjango)和应用程序结构(名称是民意调查)如下所示在virtualenv。 (.nja文件只是由我正在使用的ninja-ide创build的)
. ├── __init__.py ├── manage.py ├── mydjango │ ├── __init__.py │ ├── __init__.pyc │ ├── mydjango.nja │ ├── settings.py │ ├── settings.pyc │ ├── templates │ │ └── admin │ │ └── base_site.html │ ├── urls.py │ ├── urls.pyc │ ├── wsgi.py │ └── wsgi.pyc ├── polls │ ├── admin.py │ ├── admin.pyc │ ├── __init__.py │ ├── __init__.pyc │ ├── models.py │ ├── models.pyc │ ├── templates │ │ ├── __init__.py │ │ └── polls │ │ ├── detail.html │ │ ├── index.html │ │ ├── __init__.py │ │ └── results.html │ ├── tests.py │ ├── tests.pyc │ ├── urls.py │ ├── urls.pyc │ ├── views.py │ └── views.pyc └── polls.nja
我跟着教程了解如何Django的作品,但我卡在testing部分。 作为教程build议我创build了一个名为tests.py文件到应用程序文件夹,非常强大的文件是:
# -*- coding: utf-8 -*- from django.test import TestCase import datetime from django.utils import timezone from polls.models import Question # Create your tests here.l class QuestionMethodTests(TestCase): def test_was_published_recently_with_future_poll(self): """ was_published_recently dovrebbe ritornare falso se si mette una data nel futuro """ future_question = Question(pub_date=timezone.now() + datetime.timedelta(hours=50)) self.assertEqual(future_question.was_published_recently(), False)
然后我把unittest2安装到virtualenv中
$pip install unittest2
并运行
$python manage.py test polls Creating test database for alias 'default'... E ====================================================================== ERROR: mydjango.polls.tests (unittest2.loader.ModuleImportFailure) ---------------------------------------------------------------------- ImportError: Failed to import test module: mydjango.polls.tests Traceback (most recent call last): File "/home/sergio/.virtualenvs/django4/local/lib/python2.7/site-packages/unittest2/loader.py", line 260, in _find_tests module = self._get_module_from_name(name) File "/home/sergio/.virtualenvs/django4/local/lib/python2.7/site-packages/unittest2/loader.py", line 238, in _get_module_from_name __import__(name) ImportError: No module named polls.tests ---------------------------------------------------------------------- Ran 1 test in 0.001s FAILED (errors=1) Destroying test database for alias 'default'...
没有办法让testing工作,如果不通过应用程序名称,它返回相同的错误:
$ python manage.py test Creating test database for alias 'default'... E ====================================================================== ERROR: mydjango.polls.tests (unittest2.loader.ModuleImportFailure) ---------------------------------------------------------------------- ImportError: Failed to import test module: mydjango.polls.tests Traceback (most recent call last): File "/home/sergio/.virtualenvs/django4/local/lib/python2.7/site-packages/unittest2/loader.py", line 260, in _find_tests module = self._get_module_from_name(name) File "/home/sergio/.virtualenvs/django4/local/lib/python2.7/site-packages/unittest2/loader.py", line 238, in _get_module_from_name __import__(name) ImportError: No module named polls.tests ---------------------------------------------------------------------- Ran 1 test in 0.001s FAILED (errors=1) Destroying test database for alias 'default'...
我的INSTALLED_APPS是:
INSTALLED_APPS = ( 'south', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'polls', )
不明白我在做什么错 – 任何帮助应该非常感激。 谢谢你
我有我的Django项目完全相同的问题:
$ python manage test polls.tests
工作正常,而以下失败导入错误:
$ python manage test polls $ python manage test (...) ImportError: Failed to import test module: mydjango.polls.tests Traceback (most recent call last): (...) ImportError: No module named polls.tests
仔细检查错误消息:Django的testing运行器试图从mydjango.polls.tests中导入testing,其中mydjango是根目录(您的项目的容器)的名称。
我通过删除mydjango目录(与manage.py文件相同的级别)中的__init__.py
文件解决了此问题。 这个目录不应该是一个Python模块,如果是这样的话,这个目录似乎和Django的testing运行器混淆了。
所以只要删除_init _.py文件就可以解决我们的问题 :
$ rm mydjango/__init__.py
对于其他人有同样的问题,这种情况发生的另一个原因是,如果你有根文件夹和项目文件夹相同的名称。
例如:
mydjango ├── __init__.py ├── manage.py ├── mydjango │ ├── __init__.py │ ├── settings.py │ ├── urls.py │ ├── wsgi.py ├── polls │ ├── admin.py │ ├── __init__.py │ ├── models.py | ├── tests.py │ ├── templates
运行./manage.py test
抛出错误没有模块名为polls.tests
修复它只是简单地将根文件夹重命名为其他内容:
mydjango_project ├── __init__.py ├── manage.py ├── mydjango │ ├── __init__.py │ ├── settings.py │ ├── urls.py │ ├── wsgi.py ├── polls │ ├── admin.py │ ├── __init__.py │ ├── models.py | ├── tests.py │ ├── templates
第一个答案没有为我工作。 即时通讯使用Win8,可能是这是一个原因。 在terminal尝试改变目录到./polls和运行
python ../manage.py test polls
无论如何运行
$ python manage.py test polls.tests
它的作品,现在对我来说已经足够了:
Creating test database for alias 'default'... F ====================================================================== FAIL: test_was_published_recently_with_future_poll (polls.tests.QuestionMethodTests) ---------------------------------------------------------------------- Traceback (most recent call last): File "/home/sergio/.virtualenvs/django4/mydjango/polls/tests.py", line 17, in test_was_published_recently_with_future_poll self.assertEqual(future_question.was_published_recently(), False) AssertionError: True != False