2014-08-29 6 views
75

sto eseguendo questo comando:AttributeError: 'modulo' oggetto non ha 'test' attributo

python manage.py test project.apps.app1.tests 

e che provoca questo errore:

AttributeError: 'module' object has no attribute 'tests'

Qui di seguito è la mia struttura di directory. Ho anche aggiunto app1 alla mia configurazione di app installata.

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' 

struttura di directory:

enter image description here

+0

Funziona senza il 'project':' python manage.py test apps.app1.tests'? – alecxe

+0

No I get ImportError: nessun modulo chiamato app – Chris

risposta

146

ho finalmente capito a lavorare su un altro problema. Il problema era che il mio test non è riuscito a trovare un'importazione.

Sembra che si verifichi l'errore precedente se il test non riesce a eseguire l'importazione. Questo ha senso perché la suite di test non può importare un test rotto. Almeno penso che questo è ciò che sta accadendo perché ho corretto l'importazione nel mio file di test e ho iniziato a funzionare abbastanza sicuro.

Per convalidare il test case, provare a importare il file del test case in console python.

Esempio:

from project.apps.app1.tests import * 
+10

Whoo grazie, è stato così impossibile trovare l'errore .. –

+0

Grazie mille! Per me mancava un modulo di terze parti "springpython". – Alex

+0

Cattiva presunzione in quel messaggio. – AdamC

0

Secondo Django documento Quando si run your tests, il comportamento predefinito del programma di utilità di prova è di trovare tutti i casi di test (vale a dire, sottoclassi di unittest.TestCase) in qualsiasi file il cui nome inizia con il test, crea automaticamente una suite di test da quei casi di test ed esegue quella suite.

in modo da provare questo: python manage.py test tests.py

4

Ho avuto lo stesso errore come Chris. Avevo eliminato un vecchio modello, quindi eseguivo tests.py, ma un altro file (views.py) stava ancora tentando di importare il modello eliminato.

Quando ho estratto la dichiarazione di importazione ormai obsoleta, il problema è stato risolto.

28

Usa:

./manage.py shell

seguito da

import myapp.tests

per trovare la natura dell'errore di importazione.

5

L'esempio precedente di Steve Bradshaw funziona per errori di importazione (grazie Steve).

Altri tipi di errori (ad esempio ValueError) può anche causare

AttributeError: 'module' object has no attribute 'tests' 

per vedere che questi errori sono

./manage.py shell 
from myapp.tests import SomeTestCase 
t = SomeTestCase() 
8

Per il mio caso, ho bisogno di creare un __init__ vuoto.py nella mia cartella app/tests

0

Ho ottenuto lo stesso errore, ma ho controllato tutti gli elenchi dei motivi qui, non ha risolto il problema.

Infine, si capisce che, il motivo è che il nome di un metodo che è stato importato ma non ancora utilizzato non è corretto. Anche se è un errore stupido, succede.

0

Assicurarsi che tutti i moduli utilizzati nel copione non siano interrotti. Con questo intendo il controllo ortografico nelle dichiarazioni di importazione.

# invalid import 
from app.model.notification import Notification 
# valid import 
from app.models.notification import Notification 

È possibile testare i moduli eseguendo le istruzioni di importazione nella console interattiva di djano.

[email protected]: 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