Ich führe diesen Befehl aus:
python manage.py test project.apps.app1.tests
und es verursacht diesen Fehler:
AttributeError: Das Objekt 'module' hat kein Attribut 'tests'.
Unten ist meine Verzeichnisstruktur. Ich habe auch app1 zu meiner installierten Apps-Konfiguration hinzugefügt.
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'
Verzeichnisaufbau:
python -c "from project.apps.app1.tests import *"
__all__
? Und eine Liste von Klassennamen, Funktionen und Variablen angeben, die bei Verwendung exportiert werden sollenfrom package_name.module import *
? Ich habe viel Glück mit diesem Muster gehabt. Ich verstehe, dass es etwas länger dauert, das__all__
Bit oben in jede Datei zu schreiben . Aber das Importieren mit " Todesstern " scheint gut zu funktionieren.Verwenden:
./manage.py shell
gefolgt von
import myapp.tests
um die Art des Importfehlers zu finden.
quelle
./manage.py shell
funktionierte einerimport myapp.tests
oderfrom myapp.tests import *
beide ohne Fehler. Aber ich bekomme immer noch den vom OP beschriebenen Fehler.Für meinen Fall muss ich eine leere __init__.py in meinem
app/tests
Ordner erstellenquelle
Das obige Beispiel von Steve Bradshaw funktioniert bei Importfehlern (danke Steve).
Andere Arten von Fehlern (z. B. ValueError) können ebenfalls Ursachen haben
um zu sehen, was diese Fehler sind
quelle
Ich hatte den gleichen Fehler wie Chris. Ich hatte ein altes Modell gelöscht und dann tests.py ausgeführt, aber eine andere Datei (views.py) versuchte immer noch, das gelöschte Modell zu importieren.
Als ich die veraltete Importanweisung herausnahm, war das Problem gelöst.
quelle
Stellen Sie sicher, dass nicht alle Module, die Sie in Ihrem Skript verwenden, beschädigt sind. Damit meine ich die Rechtschreibprüfung in Ihren Importanweisungen.
Sie können Ihre Module testen, indem Sie Importanweisungen in der interaktiven Konsole von djano ausführen.
quelle
Ich habe den Fehler "AttributeError: Modul 'utils' hat kein Attribut 'name_of_my_function'" behoben, indem ich eine zirkuläre Importreferenz korrigiert habe. Meine Dateien manage.py und utils.py hatten jeweils eine Importanweisung, die aufeinander zeigte.
quelle
Laut Django-Dokument Wenn Sie Ihre Tests ausführen , besteht das Standardverhalten des Testdienstprogramms darin, alle Testfälle ( dh Unterklassen von unittest.TestCase ) in einer Datei zu finden, deren Name mit test beginnt. Erstellen Sie automatisch eine Testsuite aus diese Testfälle und führen Sie diese Suite aus.
Versuchen Sie Folgendes:
python manage.py test tests.py
quelle
Ich habe den gleichen Fehler erhalten, aber alle Gründe hier überprüft. Mein Problem wurde nicht behoben.
Stellen Sie schließlich fest, dass der Grund dafür ist, dass der Name einer Methode, die importiert, aber noch nicht verwendet wurde, nicht korrekt ist. Obwohl es ein dummer Fehler ist, passiert es.
quelle
Ich hatte den gleichen Fehler. Es stellte sich heraus, dass ich mein Modul common.py nannte, aber es gab bereits ein anderes common.py-Modul. Ich musste lediglich mein Modul umbenennen.
quelle
Ich hatte einen ähnlichen Fehler beim Schreiben eines unittest.TestCase. Als ich die gleiche Methodendefinition wie sie ist neu eingegeben habe, schien es zu funktionieren!
Die einzige Änderung, die ich bei PyCharm bemerkt habe, war das Popup-Fenster "Überschreiben" beim zweiten Mal, da die Setup-Methode (Selbstmethode) die in TestCase definierte ursprüngliche Methode überschreiben muss.
quelle