Running django tutorial tests fail - No module named polls.tests
Question: I'm playing with django 1.6 tutorial but i can't run tests. My project (name
mydjango) and app structure (name is polls) are as shown below in a
virtualenv. (.nja files are just created by ninja-ide the ide i'm using)

    
    
    .
    ├── __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
    

I followed the tutorial to understand how django works but i'm stuck in the
test part. As tutorial suggest i created a file named tests.py into the app
folder, the pretty strighforward file is:

    
    
    # -*- 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)
    

then i installed unittest2 into the virtualenv with

    
    
    $pip install unittest2
    

and run

    
    
    $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'...
    

No way to have the test working, also if don't pass the app name it returns
the same error:

    
    
    $ 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'...
    

My INSTALLED_APPS are:

    
    
    INSTALLED_APPS = (
        'south',
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
        'polls',
    )
    

Can't understand what's i'm doing wrong - any help should be really
appreciated. Thank u


Answer: I had exactly the same issue with my Django project:

    
    
    $ python manage test polls.tests
    

worked fine whereas the following failed with an import error:

    
    
    $ 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
    

Check carefully the error message: Django's test runner tries to import the
tests from **mydjango.polls.tests** where _mydjango_ is the name of the root
directory (the container for your project).

I fixed this issue by deleting the `__init__.py` file in _mydjango_ directory
(at the same level than manage.py file). This directory is not supposed to be
a python module and it seems to mess up with Django's test runner if it is the
case.

**So just deleting the __init_ _.py file should fix our problem**:

    
    
    $ rm mydjango/__init__.py
    

