[Django]-Django test runner not finding tests

13πŸ‘

βœ…

Worked it out.

It turns out I had done django-admin.py startproject pyDietTracker but not python manage.py startapp myApp. After going back and doing this, it did work as documented. It would appear I have a lot to learn about reading and the difference between a site and an app in Django.

Thank you for your help S.Lott and Emil StenstrΓΆm. I wish I could accept both your answers because they are both helped alot.

Most important lesson Tests only work at the app level not the site level

πŸ‘€user1333

234πŸ‘

I had the same issue but my root cause was different.

I was getting Ran 0 tests, as OP.

But it turns out the test methods inside your test class must start with keyword test to run.

Example:

from django.test import TestCase


class FooTest(TestCase):
    def setUp(self):
        pass

    def tearDown(self):
        pass

    def this_wont_run(self):
        print 'Fail'

    def test_this_will(self):
        print 'Win'

Also the files with your TestCases in them have to start with test.

πŸ‘€Eduardo

154πŸ‘

If you’re using a yourapp/tests package/style for unittests, make sure there’s a __init__.py in your tests folder (since that’s what makes it a Python module!).

πŸ‘€David Lam

48πŸ‘

I can run test for specific apps e.g.

python project/manage.py test app_name

but when I run

python project/manage.py test

0 tests was found

Figure out I need to run this in the same directory as manage.py

so the solution would be, cd to project directory and run

python manage.py test
πŸ‘€codingrhythm

28πŸ‘

In my case, the app folder itself was missing an __init__.py. This results in the behaviour that the test will be run with python manage.py test project.app_name but not with python manage.py test.

project/
  app_name/
    __init__.py   # this was missing
πŸ‘€Thijs

19πŸ‘

This may also happen when you are using a tests module instead of a tests.py. In this case you need to import all the test classes into the __init__.py of your tests module, e.g.

tests/
    __init__.py
    somemodule.py

In your __init__.py you now need to import the somemodule like this:

from .somemodule import *
πŸ‘€devsnd

18πŸ‘

In my case, I typed def instead of class. Instead of

class TestDisplayWeight(TestCase): # correct!

I had

def TestDisplayWeight(TestCase): # wrong!
πŸ‘€Flimm

16πŸ‘

This also happens if you have a syntax error in your tests.py.

πŸ‘€Daniel Gasull

8πŸ‘

I know I am late at this point but I also had trouble with

Found 0 test(s).
System check identified no issues (1 silenced).

----------------------------------------------------------------------
Ran 0 tests in 0.000s

OK

I have followed all the steps still I was facing the same issue. My fix was I missed __init__.py file in the test directory. Adding the file and re-running the command solved my issue.

HIGHLIGHTING IT A BIT:

Make sure you have __init__.py file

7πŸ‘

in my case, I miss starting my functions name with test_
and when run my test with :

python manage.py test myapp

result was :

Creating test database for alias 'default'...
System check identified no issues (0 silenced).

----------------------------------------------------------------------
Ran 0 tests in 0.000s

OK
Destroying test database for alias 'default'...

it seems Django cannot recognize my tests!

then i change myproject/myapp/test.py file like this :

from django.test import TestCase
# Create your tests here.
class apitest(TestCase):

    def test_email(self):
        pass
    def test_secend(self):
        pass

after that result is:

Creating test database for alias 'default'...
System check identified no issues (0 silenced).
..
----------------------------------------------------------------------
Ran 2 tests in 2.048s

OK
Destroying test database for alias 'default'...
πŸ‘€Benyamin

6πŸ‘

Here’s another one that I’ve just had: Check your test files are not executable. My virtualbox auto-mounted them as executable so the test discover missed them completely. I had to add them into the relevant __init__.py files before someone told me what the issue was as a work around, but now they are removed, and non-executable and everything _just_works.

πŸ‘€David Boshton

3πŸ‘

I had this happen when I had a test.py file, and a test/ subdirectory, in the same Django app directory. I guess I’m confusing python or the test runner whether I’m looking for a test module (in test.py) or a test package (in test/ subdir).

πŸ‘€Nils

1πŸ‘

See https://docs.djangoproject.com/en/1.11/topics/testing/overview/

The most common reason for tests not running is that your settings aren’t right, and your module is not in INSTALLED_APPS.

We use django.test.TestCase instead of unittest.TestCase. It has the Client bundled in.

https://docs.djangoproject.com/en/1.11/topics/testing/tools/#django.test.TestCase

πŸ‘€S.Lott

1πŸ‘

If you are trying to run a test in your main app, such as my_app/my_app/ make sure you have the following checked:

  1. App name is listed in INSTALLED_APPS inside settings.py
  2. Make sure your DATABASES['default'] inside settings.py is set properly
  3. The App has a models.py (even if you are not using one, at least an empty one is required to be there)

1πŸ‘

Using this syntax

python manage.py test

instead of ./manage.py test solved this problem for me.

1πŸ‘

If you encounter this error after upgrading to Django 3, it might be because the -k parameter changed meaning from:

-k, --keepdb          Preserves the test DB between runs.

to

-k TEST_NAME_PATTERNS   Only run test methods and classes that match the pattern or substring. Can be used multiple times. Same as unittest -k option.

So just replace -k with --keepdb to make it work again.

πŸ‘€Eric Darchis

1πŸ‘

I had the same problem, turns out I saved the __init__ as a python file but it did not put .py at the end of its name. I added .py at the end of file’s name. it was ok afterwards

(in other words, I had created __init__ instead of __init__.py )

πŸ‘€Matin Onegh

1πŸ‘

I had to cd into the Django project directory for the tests to be found.

πŸ‘€wieczorek1990

0πŸ‘

In the same file, I had two test classes with the SAME NAME, and of course this prevented all tests from running.

πŸ‘€Rick Graves

0πŸ‘

I created a method called run in my test class which turned out to be a very bad idea. Python could see that I wanted to run tests, but was unable to. This problem is slightly different, but the result is the same – it made it seem as if the tests couldn’t be found.

Note that the following message was displayed:

You want to run the existing test: <unittest.runner.TextTestResult run=0 errors=0 failures=0>

πŸ‘€Qarj

0πŸ‘

Run --help and look for verbose. Crank it to max.

I ran manage.py test --verbose and found this debug output right at the top:

>nosetests --with-spec --spec-color --verbose --verbosity=2.

Oh look! I had installed and forgotten about nosetests. And it says --verbosity=2. I figured out that 3 is the max and running it with 3 I found lots of these:

nose.selector: INFO: /media/sf_C_DRIVE/Users/me/git/django/app/tests/test_processors.py is executable; skipped

That gave me the right hint. It indeed has problems with files having the x-bit set. However, I was thrown off the track as it had run SOME of the tests – even though it explicitly said it would skip them. Changing bits is not possible, as I run the tests in a VM, sharing my Windows NTFS-disk. So adding --exe fixed it.

πŸ‘€Chris

0πŸ‘

Had the same issue and it was because my filename had a - char in its name.
My filename was route-tests.py and changed it to route_tests.py

πŸ‘€O-9

0πŸ‘

Django engine searches files and folders with test_ prefix (inside of a tests folder). In my case it was simple solution.

So, be sure to checkout file/folder name starts with it.

πŸ‘€Mastermind

0πŸ‘

I had the same problem, it was caused by init.py at the project root – deleted that, all tests ran fine again.

πŸ‘€Doha Simon

0πŸ‘

This is late. but you can simply add your app name in front of importing models. like

    from myapp.models import something

This works for Me.

πŸ‘€Winston

0πŸ‘

In Django, methods in test classes must start with "test" keyword. for example test_is_true(). methods name like is_true() will not execute.

0πŸ‘

In my i resolve this, using python manage.py test apps and works, because i’m creating my apps inside folder apps, not at the same level of project.


    .
    β”œβ”€β”€ HFarm
    β”œβ”€β”€ .vscode
    β”œβ”€β”€ apps/
    β”‚   └── accounts/
    β”‚       β”œβ”€β”€ migrations
    β”‚       β”œβ”€β”€ templates
    β”‚       β”œβ”€β”€ tests/
    β”‚       β”‚   β”œβ”€β”€ __init__.py
    β”‚       β”‚   └── testAccount.py
    β”‚       β”œβ”€β”€ utils/
    β”‚       β”‚   β”œβ”€β”€ __init__.py
    β”‚       β”‚   └── mail.py
    β”‚       β”œβ”€β”€ __init__.py
    β”‚       β”œβ”€β”€ admin.py
    β”‚       β”œβ”€β”€ apps.py
    β”‚       β”œβ”€β”€ forms.py
    β”‚       β”œβ”€β”€ models.py
    β”‚       β”œβ”€β”€ urls.py
    β”‚       └── views.py
    β”œβ”€β”€ backend/
    β”‚   β”œβ”€β”€ __init__.py
    β”‚   β”œβ”€β”€ asgi.py
    β”‚   β”œβ”€β”€ settings.py
    β”‚   β”œβ”€β”€ urls.py
    β”‚   └── wsgi.py
    └── manage.py

#tests/init.py


    from .testsAccount import *
πŸ‘€Igor Lopes

Leave a comment