「「テスト」モジュールが正しくインポートされていない」とはどういう意味ですか?


82

動作中のテストを1行ずつコピーし、いくつかの名前を変更したところ(少なくともそう思った)、この非常に不可解なエラーが発生しました:(いくつかのものをFOO、BARに置き換えました)

ImportError: 'tests' module incorrectly imported from 'FOO/exports/tests'. Expected 'FOO/exports'. Is this module globally installed?

問題は、私がエラーをまったく理解していないことです。このエラーメッセージはどういう意味ですか?

完全なスタックトレース:

Traceback (most recent call last):
  File "BAR/modeling/manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "/Users/jonathan/anaconda/lib/python2.7/site-packages/django/core/management/__init__.py", line 353, in execute_from_command_line
    utility.execute()
  File "/Users/jonathan/anaconda/lib/python2.7/site-packages/django/core/management/__init__.py", line 345, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/Users/jonathan/anaconda/lib/python2.7/site-packages/django/core/management/commands/test.py", line 30, in run_from_argv
    super(Command, self).run_from_argv(argv)
  File "/Users/jonathan/anaconda/lib/python2.7/site-packages/django/core/management/base.py", line 348, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/Users/jonathan/anaconda/lib/python2.7/site-packages/django/core/management/commands/test.py", line 74, in execute
    super(Command, self).execute(*args, **options)
  File "/Users/jonathan/anaconda/lib/python2.7/site-packages/django/core/management/base.py", line 399, in execute
    output = self.handle(*args, **options)
  File "/Users/jonathan/anaconda/lib/python2.7/site-packages/django/core/management/commands/test.py", line 90, in handle
    failures = test_runner.run_tests(test_labels)
  File "/Users/jonathan/anaconda/lib/python2.7/site-packages/django/test/runner.py", line 531, in run_tests
    suite = self.build_suite(test_labels, extra_tests)
  File "/Users/jonathan/anaconda/lib/python2.7/site-packages/django/test/runner.py", line 451, in build_suite
    tests = self.test_loader.discover(start_dir=label, **kwargs)
  File "/Users/jonathan/anaconda/lib/python2.7/unittest/loader.py", line 206, in discover
    tests = list(self._find_tests(start_dir, pattern))
  File "/Users/jonathan/anaconda/lib/python2.7/unittest/loader.py", line 267, in _find_tests
    raise ImportError(msg % (mod_name, module_dir, expected_dir))
ImportError: 'tests' module incorrectly imported from 'FOO/exports/tests'. Expected 'FOO/exports'. Is this module globally installed?

完全なスタックトレースを投稿できますか?
ダニエルヘッパー2016年

関係するファイルツリーを追加して、インポートしようとしている構造とファイルを確認してくださいtests
trinchet 2016年

回答:


202

私の経験では、テスト実行時の奇妙なImportErrorsは、テストモジュール自体のImportErrorが原因で発生します。

テストモジュールをインポートできることを確認します。

$ python manage.py shell
...
>>> import foo.exports.tests

編集:

それがエラーを引き起こす場合は、ディレクトリfoo/exports/testsとファイルの両方がないことを確認してくださいfoo/exports/tests.py


はい、そのようなモジュールはないと言っています。しかし、ファイルはそこにあります。他に何ができますか?
jonalv 2016年

59
ディレクトリfoo/exports/testsとファイルの両方がありますfoo/exports/tests.pyか?
ダニエルヘッパー2016年

46
ああ、そこにDjangoautomagictests.pyファイルがありました。ナイスキャッチ。そして、なんと不可解なエラーメッセージ... :(
jonalv 2016年

9
django自動tests.pyも私を捕まえました
マンハッタン博士

2
あなたの編集は私を救ったものです!startappを実行すると、djangoはtests.pyファイルを作成しました。シェルにtests.pyをインポートできました
Daniel Butler

68

Daniel Hepperが上記のコメントで述べたように、アプリにapp/testsフォルダーとapp/tests.pyファイルの両方があるかどうかを確認してみてください。

Djangostartapptests.pyファイルを自動的に作成するため、気づいていないファイルがある可能性があります。

自動生成されたtests.pyファイルを削除するだけで、機能するはずです。(もちろん、何かを削除する前にファイルの内容を確認する必要があります!)


素晴らしいサー、それは私の時間を節約します:*
UsamaNadeem19年

5

testsという名前のディレクトリを作成し、その中にtest_views.py、test_models.pyなどのテストファイルを書き込んだ場合は、コマンド「pythonmanage.py」によって自動的に作成されたファイル「test.py」を必ず削除してください。 startapp '


1

考えられるケースのリストに追加するだけです。

これは、使用しているパッケージがローカルにインストールされている場合、仮想環境内でも発生する可能性があります。

その場合は、developコマンドを使用して、インストールされたバージョンをアンインストールして「再リンク」する必要があります(正しい用語はわかりません)。

~/dev/stufflib% pip uninstall stufflib
~/dev/stufflib% python setup.py develop
~/dev/stufflib% python setup.py test

0

私の場合、問題は、「実際の」パスからではなく、プロジェクトのあるフォルダーへのシンボリックリンクからdjangoテストタスクを開始しようとしたためでした。シンボリックリンクを使用せずにプロジェクトフォルダーからdjangoテストタスクを実行すると、このエラーは発生しません。


0

app/testsフォルダとapp / tests.pyの両方があるかどうかを確認してみてください

アプリ内のファイル。

デフォルトでは、ファイルは自動的に「tests.pyこのファイルの削除」と呼ばれ、エラーが解決されます

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.