Не удалось запустить учебные тесты django - нет модуля с именем polls.tests
Я играю с django 1.6, но не могу запустить тесты. Мой проект (имя mydjango) и структура приложения (имя - опросы), как показано ниже в virtualenv. (.nja файлы только что созданы ninja-ide и чем я пользуюсь)
.
├── __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, но я застрял в тестовой части. Как подсказывает руководство, я создал файл с именем 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'...
Невозможно заставить тест работать, также, если не передать имя приложения, оно возвращает ту же ошибку:
$ 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',
)
Что я делаю неправильно?
4 ответа
У меня была точно такая же проблема с моим проектом 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 пытается импортировать тесты из mydjango.polls.tests, где mydjango - это имя корневого каталога (контейнера для вашего проекта).
Я исправил эту проблему, удалив __init__.py
файл в каталоге mydjango (на том же уровне, что и файл manage.py). Предполагается, что этот каталог не является модулем Python, и в этом случае он может запутаться в тестовом средстве Django.
Поэтому простое удаление файла _ 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
Во всяком случае работает
$ 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
Первый ответ не работал для меня. Я использую Win8, может быть, это причина. в терминале попробуйте изменить dir на./polls и запустить
python ../manage.py test polls