web-dev-qa-db-fra.com

AttributeError: l'objet 'module' n'a pas d'attribut 'tests'

J'exécute cette commande:

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

et cela cause cette erreur:

AttributeError: l'objet 'module' n'a pas d'attribut 'tests'

Voici la structure de mon répertoire. J'ai également ajouté app1 à la configuration de mes applications installées.

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'

Structure du répertoire:

enter image description here

91
Chris

J'ai finalement compris qu'il travaillait sur un autre problème. Le problème était que mon test ne pouvait pas trouver une importation.

Il semble que vous obteniez l'erreur ci-dessus si l'importation de votre test échoue. Cela a du sens car la suite de tests ne peut pas importer un test cassé. Au moins, je pense que c'est ce qui se passe car j'ai corrigé l'importation dans mon fichier de test et, bien sûr, cela a commencé à fonctionner.

Pour valider votre cas de test, essayez simplement d’importer le fichier de cas de test dans la console python.

Exemple:

from project.apps.app1.tests import *
173
Chris

Utilisation:

./manage.py Shell

suivi par

import myapp.tests

pour trouver la nature de l'erreur d'importation.

34
Steve Bradshaw

Pour mon cas, je dois créer un vide __init __. Py dans mon dossier app/tests

15
tmin

L'exemple ci-dessus de Steve Bradshaw fonctionne pour les erreurs d'importation (merci Steve).

D'autres types d'erreur (par exemple, ValueError) peuvent également causer

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

pour voir quelles sont ces erreurs

./manage.py Shell
from myapp.tests import SomeTestCase
t = SomeTestCase()
6
lukeaus

J'ai eu la même erreur que Chris. J'avais supprimé un ancien modèle, puis lancé tests.py, mais un autre fichier (views.py) essayait toujours d'importer le modèle supprimé.

Lorsque j'ai sorti l'instruction d'importation, devenue obsolète, le problème a été résolu.

4
Doug Murphy

Assurez-vous que tous les modules que vous utilisez dans votre script ne sont pas cassés. J'entends par là vérifier l'orthographe dans vos déclarations d'importation.

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

Vous pouvez tester vos modules en exécutant les instructions imports dans la console interactive 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
3
Lukasz Dynowski

J'ai résolu l'erreur "AttributeError: le module 'utils' n'a pas d'attribut 'name_of_my_function' '" en fixant une référence d'importation circulaire. Mes fichiers manage.py et utils.py avaient chacun une déclaration d'importation pointant l'un vers l'autre.

1
rudyt

Selon Django document Lorsque vous exécutez vos tests , le comportement par défaut de l'utilitaire de test consiste à rechercher tous les cas de test (c'est-à-dire des sous-classes de nittest.TestCase). ) dans tout fichier dont le nom commence par test, générez automatiquement une suite de tests à partir de ces cas de tests et exécutez cette suite.

alors essayez ceci: python manage.py test tests.py

1
Kasrâmvd

Vous avez la même erreur, mais vous avez vérifié toutes les raisons ici, je n'ai pas résolu mon problème.

Finalement, comprenez que la raison en est que le nom d’une méthode qui a été importée mais pas encore utilisée n’est pas correct. Bien que ce soit une erreur stupide, cela arrive.

1
zhihong

J'ai eu la même erreur. C'est parce que j'ai nommé mon module common.py, mais il y avait déjà un autre module common.py. Tout ce que je devais faire était de renommer mon module.

0
Davide Andrea