Подтвердить что ты не робот

Запуск тестов для учебного курса 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',
)

Что я делаю неправильно?

4b9b3361

Ответ 1

У меня была такая же проблема с моим проектом 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 test runner пытается импортировать тесты из mydjango.polls.tests, где mydjango - это имя корневого каталога (контейнер для вашего проекта).

Я исправил эту проблему, удалив файл __init__.py в каталоге mydjango (на том же уровне, что и файл manage.py). Этот каталог не должен быть модулем python, и, похоже, это испортит тестовый бегун Django, если это так.

Так что просто удаление файла _init_.py должно исправить нашу проблему:

$ rm mydjango/__init__.py

Ответ 2

Для других, имеющих одну и ту же проблему, еще одна причина для этого - иметь одно и то же имя для корневой папки и папки проекта.

Например:

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

Ответ 3

В любом случае

$ 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

Ответ 4

первый ответ не помог мне. im, используя win8, может быть, это и есть причина. в терминале попробуйте изменить каталог на. /polls и запустить

python ../manage.py test polls