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 la estructura de mi directorio. También agregué app1 a la configuración de mis 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:
python -c "from project.apps.app1.tests import *"
__all__
variable en cada archivo? ¿Y especificar una lista de nombres de clases, funciones y variables para exportar cuando se usafrom package_name.module import *
? He tenido buena suerte con este patrón. Entiendo que se necesita un poco más de tiempo para escribir el__all__
bit en la parte superior de cada archivo. Pero la importación con " estrella de la muerte " parece funcionar bien.Utilizar:
./manage.py shell
seguido por
import myapp.tests
para encontrar la naturaleza del error de importación.
fuente
./manage.py shell
, unoimport myapp.tests
ofrom myapp.tests import *
ambos funcionaron sin error. Pero sigo recibiendo el error descrito por el OP.Para mi caso, necesito crear un __init__.py vacío en mi
app/tests
carpetafuente
El ejemplo anterior de Steve Bradshaw funciona para errores de importación (gracias Steve).
Otro tipo de errores (por ejemplo, ValueError) también pueden causar
para ver cuáles son estos errores
fuente
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ó.
fuente
Asegúrese de que todos los módulos que está utilizando en su secuencia de comandos no estén dañados. Con esto me refiero a revisar la ortografía en sus declaraciones de importación.
Puede probar sus módulos ejecutando declaraciones de importación en la consola interactiva de djano.
fuente
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 tenían cada uno una declaración de importación apuntando entre sí.
fuente
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, automáticamente construya una suite de pruebas a partir de esos casos de prueba y ejecutar esa suite.
así que prueba esto:
python manage.py test tests.py
fuente
Obtuve el mismo error, pero verifiqué todas las razones aquí, no solucionó mi problema.
Finalmente, averigüe que la razón es que el nombre de un método que se importó pero que aún no se usó no es correcto. Aunque es un error estúpido, sucede.
fuente
Yo tenía el mismo error. Resultó ser porque nombré a mi módulo common.py, pero ya había algún otro módulo common.py. Todo lo que tenía que hacer era cambiar el nombre de mi módulo.
fuente
Tuve un error similar al escribir un unittest.TestCase. Cuando volví a escribir la misma definición de método tal como estaba, ¡pareció funcionar!
El único cambio que noté en PyCharm fue el icono emergente 'anular' la segunda vez, ya que el método de configuración (auto) debe anular el método original definido en TestCase.
fuente