Uruchamiam to polecenie:
python manage.py test project.apps.app1.tests
i powoduje ten błąd:
AttributeError: obiekt „module” nie ma atrybutu „testy”
Poniżej znajduje się moja struktura katalogów. Dodałem również app1 do mojej zainstalowanej konfiguracji aplikacji.
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'
Struktura katalogów:
python -c "from project.apps.app1.tests import *"
__all__
zmiennej w każdym pliku? I określ listę nazw klas, funkcji i zmiennych do wyeksportowania podczas używaniafrom package_name.module import *
? Miałem szczęście z tym wzorem. Rozumiem, że zapisanie__all__
bitu na początku każdego pliku zajmuje trochę więcej czasu . Ale importowanie przy użyciu „ gwiazdy śmierci ” wydaje się działać dobrze.Posługiwać się:
./manage.py shell
śledzony przez
import myapp.tests
aby znaleźć charakter błędu importu.
źródło
./manage.py shell
wtedy jedenimport myapp.tests
lubfrom myapp.tests import *
oba działały bez błędów. Ale nadal pojawia się błąd opisany przez OP.W moim przypadku muszę utworzyć pusty plik __init__.py w moim
app/tests
folderzeźródło
Powyższy przykład Steve'a Bradshawa działa w przypadku błędów importu (dzięki Steve).
Inne rodzaje błędów (np. ValueError) również mogą powodować
żeby zobaczyć, jakie to błędy
źródło
Miałem ten sam błąd co Chris. Usunąłem stary model, a następnie uruchomiłem tests.py, ale inny plik (views.py) nadal próbował zaimportować usunięty model.
Kiedy wyciągnąłem przestarzałą instrukcję importu, problem został rozwiązany.
źródło
Upewnij się, że wszystkie moduły, których używasz w swoim skrypcie, nie są uszkodzone. Rozumiem przez to sprawdzanie pisowni w instrukcjach importu.
Możesz przetestować swoje moduły, wykonując instrukcje importu w interaktywnej konsoli djano.
źródło
Rozwiązałem błąd „AttributeError: moduł 'utils' nie ma atrybutu 'name_of_my_function'”, naprawiając cykliczne odniesienie do importu. Moje pliki manage.py i utils.py miały instrukcję importu wskazującą na siebie.
źródło
Zgodnie z dokumentem django Kiedy uruchamiasz testy , domyślnym zachowaniem narzędzia testowego jest znalezienie wszystkich przypadków testowych (czyli podklas unittest.TestCase ) w dowolnym pliku, którego nazwa zaczyna się od test, automatycznie tworzy zestaw testów z te przypadki testowe i uruchom ten pakiet.
więc spróbuj tego:
python manage.py test tests.py
źródło
Mam ten sam błąd, ale sprawdziłem tutaj listę wszystkich powodów, nie rozwiązałem mojego problemu.
W końcu zrozum, że powodem jest to, że nazwa jednej metody, która importowała, ale jeszcze nie była używana, jest nieprawidłowa. Choć jest to głupi błąd, zdarza się.
źródło
Miałem ten sam błąd. Okazało się, że to dlatego, że nazwałem swój moduł common.py, ale istniał już inny moduł common.py. Wszystko, co musiałem zrobić, to zmienić nazwę mojego modułu.
źródło
Miałem podobny błąd podczas pisania unittest.TestCase. Kiedy przepisałem tę samą definicję metody, jak jest, wydawało się, że działa!
Jedyną zmianą, jaką zauważyłem w PyCharm, była wyskakująca ikona „override” po raz drugi, ponieważ metoda konfiguracji (własna) musi zastąpić oryginalną metodę zdefiniowaną w TestCase.
źródło