运行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