Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Running django tutorial tests fail - No module named polls.tests

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 straightforward 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', ) 

What am I doing wrong?

like image 591
bre Avatar asked Jan 12 '14 00:01

bre


People also ask

How do I run test cases in Django?

Open /catalog/tests/test_models.py.TestCase , as shown: from django. test import TestCase # Create your tests here. Often you will add a test class for each model/view/form you want to test, with individual methods for testing specific functionality.

How do I run test PY?

If you're using the PyCharm IDE, you can run unittest or pytest by following these steps: In the Project tool window, select the tests directory. On the context menu, choose the run command for unittest . For example, choose Run 'Unittests in my Tests…'.

What is Django test client?

The test client is a Python class that acts as a dummy web browser, allowing you to test your views and interact with your Django-powered application programmatically.


Video Answer


2 Answers

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 
like image 98
pchiquet Avatar answered Sep 18 '22 09:09

pchiquet


For anyone else having the same problem, another reason for this to happen is if you have the same name for the root folder and the project folder.

For example:

mydjango ├── __init__.py ├── manage.py ├── mydjango │   ├── __init__.py │   ├── settings.py │   ├── urls.py │   ├── wsgi.py ├── polls │   ├── admin.py │   ├── __init__.py │   ├── models.py |   ├── tests.py │   ├── templates 

running ./manage.py test

throws errors No module named polls.tests

to fix it simply rename the root folder to something else like :

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 
like image 29
buluba89 Avatar answered Sep 18 '22 09:09

buluba89