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?
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.
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…'.
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.
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
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With