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:
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 *
Utilisation:
./manage.py Shell
suivi par
import myapp.tests
pour trouver la nature de l'erreur d'importation.
Pour mon cas, je dois créer un vide __init __. Py dans mon dossier app/tests
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()
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.
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
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.
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
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.
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.