私はこのコマンドを実行しています:
python manage.py test project.apps.app1.tests
そして、それはこのエラーを引き起こします:
AttributeError:「モジュール」オブジェクトには属性「テスト」がありません
以下は私のディレクトリ構造です。また、インストール済みのアプリ構成に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'
ディレクトリ構造:
私はついに別の問題に取り組んでいることがわかりました。問題は、テストでインポートが見つからなかったことです。
テストのインポートに失敗すると、上記のエラーが発生するようです。テストスイートは壊れたテストをインポートできないため、これは理にかなっています。少なくとも、テストファイル内のインポートを修正し、十分に機能し始めたので、これが起こっていると思います。
テストケースを検証するには、pythonコンソールにテストケースファイルをインポートしてみてください。
例:
from project.apps.app1.tests import *
つかいます:
./manage.py Shell
に続く
import myapp.tests
インポートエラーの性質を見つけます。
私の場合、app/tests
フォルダーにempty __init __。pyを作成する必要があります
上記のSteve Bradshawの例は、インポートエラーに対して機能します(ありがとう、Steve)。
他のタイプのエラー(ValueErrorなど)も原因となる場合があります
AttributeError: 'module' object has no attribute 'tests'
これらのエラーが何であるかを確認するには
./manage.py Shell
from myapp.tests import SomeTestCase
t = SomeTestCase()
クリスと同じエラーがありました。古いモデルを削除してからtests.pyを実行しましたが、別のファイル(views.py)が削除されたモデルをインポートしようとしていました。
廃止されたimportステートメントを削除すると、問題は解決しました。
スクリプトで使用しているすべてのモジュールが壊れていないことを確認してください。つまり、インポートステートメントのスペルをチェックするということです。
# invalid import
from app.model.notification import Notification
# valid import
from app.models.notification import Notification
Djanoのインタラクティブコンソールでimportsステートメントを実行して、モジュールをテストできます。
$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:module 'utils' has no attribute 'name_of_my_function'」というエラーを解決しました。私のファイルmanage.pyとutils.pyにはそれぞれ、相互に指すimportステートメントがありました。
Djangoドキュメントによると、 テストを実行 の場合、テストユーティリティのデフォルトの動作は、すべてのテストケース(つまり、 nittest.TestCaseのサブクラス) )名前がtestで始まるファイルで、これらのテストケースからテストスイートを自動的に構築し、そのスイートを実行します。
だからこれを試してください:python manage.py test tests.py
同じエラーが発生しましたが、ここですべての理由リストを確認しましたが、私の問題は解決しませんでした。
最後に、理由は、インポートしたがまだ使用していない1つのメソッドの名前が正しくないことです。それは愚かなエラーですが、起こります。
同じエラーが発生しました。私のモジュールにcommon.pyという名前を付けたためであることが判明しましたが、既に他のcommon.pyモジュールがいくつかありました。モジュールの名前を変更するだけでした。