python - test - AttributeError: el objeto ''módulo'' no tiene atributo ''pruebas''
tox django (11)
Asegúrese de que todos los módulos que está utilizando en su script no estén rotos. Con esto quiero decir revisar la ortografía en sus declaraciones de importación.
# invalid import
from app.model.notification import Notification
# valid import
from app.models.notification import Notification
Puede probar sus módulos ejecutando declaraciones de importación en la consola interactiva de djano.
$root@13faefes8: python manage.py shell
Type "help", "copyright", "credits" or "license" for more information (InteractiveConsole)
>>> from app.model.notification import Notification
Traceback (most recent call last):
File "<console>", line 1, in <module>
ImportError: No module named model.notification
Estoy ejecutando este comando:
python manage.py test project.apps.app1.tests
y causa este error:
AttributeError: el objeto ''módulo'' no tiene atributo ''pruebas''
A continuación se muestra mi estructura de directorios. También agregué app1 a mi configuración de aplicaciones instaladas.
Traceback (most recent call last):
File "manage.py", line 10, in <module> execute_from_command_line(sys.argv)
File "/home/username/local/dev/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 385, in execute_from_command_line
utility.execute()
File "/home/username/local/dev/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 377, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/home/username/local/dev/local/lib/python2.7/site-packages/django/core/management/commands/test.py", line 50, in run_from_argv
super(Command, self).run_from_argv(argv)
File "/home/username/local/dev/local/lib/python2.7/site-packages/django/core/management/base.py", line 288, in run_from_argv
self.execute(*args, **options.__dict__)
File "/home/username/local/dev/local/lib/python2.7/site-packages/django/core/management/commands/test.py", line 71, in execute
super(Command, self).execute(*args, **options)
File "/home/username/local/dev/local/lib/python2.7/site-packages/django/core/management/base.py", line 338, in execute
output = self.handle(*args, **options)
File "/home/username/local/dev/local/lib/python2.7/site-packages/django/core/management/commands/test.py", line 88, in handle
failures = test_runner.run_tests(test_labels)
File "/home/username/local/dev/local/lib/python2.7/site-packages/django/test/runner.py", line 146, in run_tests
suite = self.build_suite(test_labels, extra_tests)
File "/home/username/local/dev/local/lib/python2.7/site-packages/django/test/runner.py", line 66, in build_suite
tests = self.test_loader.loadTestsFromName(label)
File "/usr/lib/python2.7/unittest/loader.py", line 100, in loadTestsFromName
parent, obj = obj, getattr(obj, part)
AttributeError: ''module'' object has no attribute ''tests''
Estructura de directorios:
De acuerdo con el documento de Django Cuando ejecuta sus pruebas , el comportamiento predeterminado de la utilidad de prueba es encontrar todos los casos de prueba (es decir, subclases de unittest.TestCase ) en cualquier archivo cuyo nombre comience con prueba, construya automáticamente un conjunto de pruebas a partir esos casos de prueba, y ejecuta esa suite.
intente esto:
python manage.py test tests.py
El ejemplo anterior de Steve Bradshaw funciona para errores de importación (gracias Steve).
Otro tipo de errores (por ejemplo, ValueError) también puede causar
AttributeError: ''module'' object has no attribute ''tests''
para ver cuáles son estos errores
./manage.py shell
from myapp.tests import SomeTestCase
t = SomeTestCase()
Finalmente lo descubrí trabajando en otro problema. El problema era que mi prueba no pudo encontrar una importación.
Parece que obtiene el error anterior si su prueba no se puede importar. Esto tiene sentido porque el conjunto de pruebas no puede importar una prueba rota. Al menos creo que esto es lo que está sucediendo porque arreglé la importación dentro de mi archivo de prueba y, efectivamente, comenzó a funcionar.
Para validar su caso de prueba, solo intente importar el archivo del caso de prueba en la consola de Python.
Ejemplo:
from project.apps.app1.tests import *
Obtuve el mismo error, pero verifiqué todas las razones aquí, no solucionó mi problema.
Finalmente descubra que, la razón es que el nombre de un método que importó pero que aún no se utiliza no es correcto. Aunque es un error estúpido, sucede.
Para mi caso, necesito crear un
__init__.py vacío
en mi carpeta de
app/tests
Resolví el error "AttributeError: el módulo ''utils'' no tiene el atributo ''name_of_my_function''" arreglando una referencia de importación circular. Mis archivos manage.py y utils.py cada uno tenía una declaración de importación apuntando el uno al otro.
Tuve el mismo error que Chris. Había eliminado un modelo antiguo, luego ejecuté tests.py, pero otro archivo (views.py) todavía estaba intentando importar el modelo eliminado.
Cuando saqué la declaración de importación ahora obsoleta, el problema se resolvió.
Tuve un error similar al escribir un unittest.TestCase. Cuando volví a escribir la misma definición de método tal como está, ¡parecía funcionar!
El único cambio que noté en PyCharm fue el ícono emergente ''anular'' la segunda vez, ya que el método de configuración (auto) necesita anular el método original definido en TestCase.
Utilizar:
./manage.py shell
seguido por
import myapp.tests
para encontrar la naturaleza del error de importación.
Yo tenía el mismo error. Resultó ser porque llamé a mi módulo common.py, pero ya había otro módulo common.py. Todo lo que tenía que hacer era cambiar el nombre de mi módulo.