AttributeError: объект 'module' не имеет атрибута 'tests'


Я запускаю эту команду:

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

и это вызывает эту ошибку:

AttributeError: объект' module 'не имеет атрибута 'tests'

Ниже приведена моя структура каталогов. Я также добавил приложение app1, чтобы мои приложения, установленные настройки.

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'

каталог структуру:

9 82

9 ответов:

Я, наконец, понял это, работая над другой проблемой. Проблема была в том, что мой тест не мог найти импорт.

похоже, что вы получаете вышеуказанную ошибку, если ваш тест не удается импортировать. Это имеет смысл, потому что набор тестов не может импортировать сломанный тест. По крайней мере, я думаю, что это то, что происходит, потому что я исправил импорт в моем тестовом файле и, конечно же, он начал работать.

чтобы проверить тестовый случай, просто попробуйте импортировать файл тестового случая в консоль python.

пример:

from project.apps.app1.tests import *

использование:

./manage.py shell

следовал по

import myapp.tests

чтобы найти характер ошибки импорта.

для моего случая, мне нужно создать пустой __init__.py в моем app/tests папку

пример Стива Брэдшоу выше работает для ошибок импорта (спасибо Стиву).

другой тип ошибок (например, ValueError) также может вызвать

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

чтобы увидеть, что эти ошибки

./manage.py shell
from myapp.tests import SomeTestCase
t = SomeTestCase()

У меня была та же ошибка, что и у Криса. Я удалил старую модель, а затем запустил tests.py, но другой файл (views.py) все еще пытался импортировать удаленную модель.

когда я вынул теперь устаревший оператор импорта, проблема решена.

согласно документу django, когда вы выполнить тесты, поведение по умолчанию тестовой утилиты состоит в том, чтобы найти все тестовые случаи (то есть подклассы unittest.Пример) в любом файле, имя которого начинается с test, автоматически создайте набор тестов из этих тестовых случаев и запустите этот набор.

Так что попробуйте это : python manage.py test tests.py

получил ту же ошибку, но проверил весь список причин здесь, не исправил мою проблему.

наконец выяснить, что, причина в том, что имя одного метода, который импортируется, но не используется еще не является правильным. Хотя это глупая ошибка, она случается.

убедитесь, что все модули, которые вы используете в вашем скрипте не сломаны. Под этим я подразумеваю проверку орфографии в ваших инструкциях импорта.

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

вы можете протестировать свои модули, выполнив инструкции imports в интерактивной консоли 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

Я разрешил ошибку " AttributeError: модуль 'utils' не имеет атрибута 'name_of_my_function'", исправив циклическую ссылку импорта. Мои файлы manage.py и utils.py у каждого был оператор импорта, указывающий друг на друга.