Je joue avec Django 1.6 tutoriel mais je ne peux pas exécuter de tests. Mon projet (nom mydjango) et la structure de l'application (nom est sondages) sont comme indiqué ci-dessous dans un virtualenv. (.Nja les fichiers sont juste créés par ninja-ide l'ide que j'utilise)
.
├── __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
J'ai suivi le tutoriel pour comprendre comment Django fonctionne mais je suis coincé dans la partie test. Comme le tutoriel suggère que j'ai créé un fichier nommé tests.py dans le dossier de l'application, le fichier assez simple est:
# -*- 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)
puis j'ai installé unittest2 dans le virtualenv avec
$pip install unittest2
et courir
$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'...
Aucun moyen de faire fonctionner le test, même si vous ne transmettez pas le nom de l'application, il renvoie la même erreur:
$ 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'...
Mes INSTALLED_APPS sont:
INSTALLED_APPS = (
'south',
'Django.contrib.admin',
'Django.contrib.auth',
'Django.contrib.contenttypes',
'Django.contrib.sessions',
'Django.contrib.messages',
'Django.contrib.staticfiles',
'polls',
)
Qu'est-ce que je fais mal?
J'ai eu exactement le même problème avec mon projet Django:
$ python manage test polls.tests
a bien fonctionné alors que ce qui suit a échoué avec une erreur d'importation:
$ 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
Vérifiez attentivement le message d'erreur: le lanceur de test de Django essaie d'importer les tests de mydjango.polls.tests où mydjango est le nom du répertoire racine (le conteneur de votre projet).
J'ai résolu ce problème en supprimant le __init__.py
fichier dans le répertoire mydjango (au même niveau que le fichier manage.py). Ce répertoire n'est pas censé être un module python et il semble gâcher le lanceur de test de Django si c'est le cas.
Il suffit donc de supprimer le fichier _ init _. Py devrait résoudre notre problème:
$ rm mydjango/__init__.py
Pour toute autre personne ayant le même problème, une autre raison à cela se produit si vous avez le même nom pour le dossier racine et le dossier de projet.
Par exemple:
mydjango
├── __init__.py
├── manage.py
├── mydjango
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ ├── wsgi.py
├── polls
│ ├── admin.py
│ ├── __init__.py
│ ├── models.py
| ├── tests.py
│ ├── templates
fonctionnement ./manage.py test
renvoie des erreurs Aucun module nommé polls.tests
pour le corriger, renommez simplement le dossier racine en quelque chose comme:
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
la première réponse n'a pas fonctionné pour moi. im en utilisant win8, c'est peut-être une raison. dans le terminal, essayez de changer dir en ./polls et la course
python ../manage.py test polls
Quoi qu'il en soit en cours d'exécution
$ python manage.py test polls.tests
Ça marche, ça me suffit en ce moment:
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