unitarias test pruebas framework assertredirects python django django-unittest

python - pruebas - testcase client django



Las pruebas del tutorial de django fallan: no hay un módulo llamado polls.tests (4)

De todos modos corriendo

$ python manage.py test polls.tests

Funciona, es suficiente para mí en este momento:

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

Estoy jugando con el tutorial de django 1.6 pero no puedo ejecutar pruebas. Mi proyecto (nombre mydjango) y la estructura de la aplicación (nombre es encuestas) se muestran a continuación en un virtualenv. (Los archivos .nja son creados por ninja-ide, el ide que estoy usando)

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

Seguí el tutorial para entender cómo funciona django pero estoy atascado en la parte de prueba. Como sugerencia del tutorial, creé un archivo llamado tests.py en la carpeta de la aplicación, el archivo bastante sencillo es:

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

Entonces instalé unittest2 en el virtualenv con

$pip install unittest2

y correr

$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 hay forma de que la prueba funcione, también si no pasa el nombre de la aplicación, devuelve el mismo 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''...

Mis INSTALLED_APPS son:

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

¿Qué estoy haciendo mal?


La primera respuesta no funcionó para mí. Im usando win8, puede ser esta es una razón. en la terminal intente cambiar dir a ./polls y la ejecución

python ../manage.py test polls


Para cualquier otra persona que tenga el mismo problema, otra razón para que esto suceda es si tiene el mismo nombre para la carpeta raíz y la carpeta del proyecto.

Por ejemplo:

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

ejecutando ./manage.py test

arroja errores No hay módulo llamado polls.tests

para solucionarlo, simplemente cambie el nombre de la carpeta raíz a otra cosa como:

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


Tuve exactamente el mismo problema con mi proyecto Django:

$ python manage test polls.tests

trabajó bien mientras que lo siguiente falló con un error de importación

$ 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

Verifique cuidadosamente el mensaje de error: el corredor de prueba de Django intenta importar las pruebas desde mydjango.polls.tests donde mydjango es el nombre del directorio raíz (el contenedor para su proyecto).

__init__.py este problema eliminando el archivo __init__.py en el directorio mydjango (al mismo nivel que el archivo manage.py). Este directorio no se supone que sea un módulo de Python y parece que se mete con el corredor de pruebas de Django, si es el caso.

Así que solo eliminar el archivo _ init _.py debería solucionar nuestro problema :

$ rm mydjango/__init__.py