“'测试'模块导入错误”是什么意思?


82

我逐行复制了一个有效的测试,只是更改了几个名称(至少我想如此),现在我得到了一个非常神秘的错误:(我用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?

您可以发布完整的堆栈跟踪信息吗?
丹尼尔·赫珀

请添加涉及的文件树,以检查要导入的结构和文件tests
trinchet

Answers:


202

以我的经验,运行测试时出现奇怪的ImportErrors是由tests模块本身中的ImportError引起的。

确保可以导入您的测试模块:

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

编辑:

如果这样会导致错误,请确保您没有目录foo/exports/tests和文件foo/exports/tests.py


是的,它说没有这样的模块。但是文件在那里。我还可以做些什么?
jonalv's

59
您是否同时具有目录foo/exports/tests和文件foo/exports/tests.py
丹尼尔·赫珀

46
哦,那里有一个Django automagictests.py文件。不错的收获。以及什么是错误的错误消息... :(
jonalv '16

9
django automatic tests.py也抓住了我
曼哈顿博士

2
您的编辑才救了我!在运行startapp时,django创建了一个tests.py文件。我能够在外壳中导入tests.py
Daniel Butler,

68

正如Daniel Hepper在上述评论中所说,请尝试检查您的应用程序中是否同时包含app/tests文件夹和app/tests.py文件。

Djangostartapptests.py自动创建一个文件,因此可能存在您没有注意到的文件。

如果您只是删除自动生成的tests.py文件,它应该可以工作。(显然,删除任何内容之前,您应该检查文件的内容!)


太棒了,先生,它节省了我的时间:*
Usama Nadeem

5

如果您已经创建了一个名为tests的目录并在其中写入了测试文件,例如test_views.py,test_models.py等,请确保删除由命令“ python manage.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测试任务而不使用symlink时,我没有得到这个错误。


0

尝试检查您是否同时拥有一个 app/tests文件夹和一个app / tests.py

在您的应用中。

默认情况下,文件自动称为tests.py删除此文件,它将解决错误

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.