[Django]-AttributeError: 'module' object has no attribute 'tests'

196๐Ÿ‘

โœ…

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 *

39๐Ÿ‘

Use:

./manage.py shell

followed by

import myapp.tests

to find the nature of the import error.

23๐Ÿ‘

For my case, I need to create an empty __init__.py in my app/tests folder

6๐Ÿ‘

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.

3๐Ÿ‘

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

2๐Ÿ‘

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.

2๐Ÿ‘

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.

1๐Ÿ‘

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

1๐Ÿ‘

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.

0๐Ÿ‘

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.

enter image description here

0๐Ÿ‘

My solution was just renaming my module.

Leave a comment