J'exécute cette commande:
python manage.py test project.apps.app1.tests
et cela provoque cette erreur:
AttributeError: l'objet 'module' n'a pas d'attribut 'tests'
Voici ma structure de répertoires. J'ai également ajouté app1 à ma configuration d'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:
python -c "from project.apps.app1.tests import *"
__all__
variable dans chaque fichier? Et spécifiez une liste de noms de classe, de fonctions et de variables à exporter lors de l'utilisationfrom package_name.module import *
? J'ai eu de la chance avec ce modèle. Je comprends qu'il faut un peu plus de temps pour écrire le__all__
bit en haut de chaque fichier. Mais importer en utilisant " Death Star " semble bien fonctionner.Utilisation:
./manage.py shell
suivi par
import myapp.tests
pour trouver la nature de l'erreur d'importation.
la source
./manage.py shell
, l'unimport myapp.tests
ou l' autre ou lesfrom myapp.tests import *
deux fonctionnaient sans erreur. Mais, j'obtiens toujours l'erreur décrite par l'OP.Pour mon cas, je dois créer un __init__.py vide dans mon
app/tests
dossierla source
L'exemple de Steve Bradshaw ci-dessus fonctionne pour les erreurs d'importation (merci Steve).
D'autres types d'erreurs (par exemple ValueError) peuvent également causer
pour voir quelles sont ces erreurs
la source
J'ai eu la même erreur que Chris. J'avais supprimé un ancien modèle, puis exécuté tests.py, mais un autre fichier (views.py) essayait toujours d'importer le modèle supprimé.
Lorsque j'ai sorti la déclaration d'importation désormais obsolète, le problème a été résolu.
la source
Assurez-vous que tous les modules que vous utilisez dans votre script ne sont pas endommagés. J'entends par là vérifier l'orthographe de vos déclarations d'importation.
Vous pouvez tester vos modules en exécutant des instructions d'importation dans la console interactive de djano.
la source
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 instruction d'importation pointant l'un vers l'autre.
la source
Selon le document django Lorsque vous exécutez vos tests , le comportement par défaut de l'utilitaire de test est de trouver tous les cas de test (c'est-à-dire les sous-classes de unittest.TestCase ) dans tout fichier dont le nom commence par test, construire automatiquement une suite de tests à partir de ces cas de test et exécutez cette suite.
alors essayez ceci:
python manage.py test tests.py
la source
J'ai eu la même erreur, mais j'ai vérifié toutes les raisons de la liste ici, je n'ai pas résolu mon problème.
Enfin comprendre que, la raison est que le nom d'une méthode qui a importé mais pas encore utilisée n'est pas correct. Bien que ce soit une erreur stupide, cela arrive.
la source
J'ai eu la même erreur. Il s'est avéré que c'était parce que j'avais nommé mon module common.py, alors qu'il y avait déjà un autre module common.py. Tout ce que j'avais à faire était de renommer mon module.
la source
J'ai eu une erreur similaire lors de l'écriture d'un unittest.TestCase. Lorsque j'ai retapé la même définition de méthode telle quelle, cela semblait fonctionner!
Le seul changement que j'ai remarqué sur PyCharm a été la fenêtre contextuelle de l'icône `` override '' la deuxième fois, car la méthode de configuration (auto) doit remplacer la méthode d'origine définie dans TestCase.
la source