问题
I'm running this command:
python manage.py test project.apps.app1.tests
and it causes this error:
AttributeError: 'module' object has no attribute 'tests'
Below is my directory structure. I've also added app1 to my installed apps config.
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'
Directory structure:
回答1:
I finally figured it out working on another problem. The problem was that my test couldn't find an import.
It looks like you get the above error if your test fails to import. This makes sense because the test suite can't import a broken test. At least I think this is what is going on because I fixed the import within my test file and sure enough it started working.
To validate your test case just try import the test case file in python console.
Example:
from project.apps.app1.tests import *
回答2:
Use:
./manage.py shell
followed by
import myapp.tests
to find the nature of the import error.
回答3:
For my case, I need to create an empty __init__.py in my app/tests
folder
回答4:
Steve Bradshaw's example above works for import errors (thanks Steve).
Other type of errors (e.g. ValueError) may also cause
AttributeError: 'module' object has no attribute 'tests'
to see what these errors are
./manage.py shell
from myapp.tests import SomeTestCase
t = SomeTestCase()
回答5:
I had the same error as Chris. I had deleted an old model, then run tests.py, but another file (views.py) was still trying to import the deleted model.
When I took out the now-obsolete import statement, problem solved.
回答6:
Make sure that all modules that you are using in your script are not broken. By this I mean check spelling in your import statements.
# invalid import
from app.model.notification import Notification
# valid import
from app.models.notification import Notification
You can test yours modules by executing imports statements in djano's interactive console.
$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
回答7:
According to django document When you run your tests, the default behavior of the test utility is to find all the test cases (that is, subclasses of unittest.TestCase) in any file whose name begins with test, automatically build a test suite out of those test cases, and run that suite.
so try this : python manage.py test tests.py
回答8:
Got the same error, but checked all the reasons list here, did not fix my problem.
Finally figure it out that, the reason is that the name of one method that imported but not used yet is not correct. Though it is a stupid error, it happens.
回答9:
I resolved the error "AttributeError: module 'utils' has no attribute 'name_of_my_function' " by fixing a circular import reference. My files manage.py and utils.py each had an import statement pointing at each other.
回答10:
I had the same error. It turned out to be because I named my module common.py, yet there already was some other common.py module. All I had to do was to rename my module.
回答11:
I had a similar error while writing a unittest.TestCase. When I re-typed the same method definition as-is, it seemed to work !
The only change I noticed on PyCharm was the 'override' icon pop-up the 2nd time, as the setup(self) method needs to override the original method defined in TestCase.
来源:https://stackoverflow.com/questions/25575073/attributeerror-module-object-has-no-attribute-tests