user441495
user441495

Reputation: 123

Why does django not see my tests?

I've created test.py module, filled with

from django.test import TestCase
from django.test.client import Client
from django.contrib.auth.models import User
from django.contrib.sites.models import Site

from forum.models import *

class SimpleTest(TestCase):


    def setUp(self):
        u = User.objects.create_user("ak", "[email protected]", "pwd")
        Forum.objects.create(title="forum")
        Site.objects.create(domain="test.org", name="test.org")

    def content_test(self, url, values):
        """Get content of url and test that each of items in `values` list is present."""
        r = self.c.get(url)
        self.assertEquals(r.status_code, 200)
        for v in values:
            self.assertTrue(v in r.content)

    def test(self):
        self.c = Client()
        self.c.login(username="ak", password="pwd")

        self.content_test("/forum/", ['<a href="/forum/forum/1/">forum</a>'])
        ....

and placed it in folder with my application. When i run tests by

python manage.py test forum

after creating the test database i get an answer "Ran 0 tests in 0.000s"

What am i doing wrong ?

P.S. Here is my project hierarchy:

MyProj:
    forum (it's my app):
        manage.py
        models.py
        views.py
        tests.py
        ...

I renamed test.py to tests.py. Eclipse got that this module is with tests, but answer is still "Ran 0 tests in 0.000s"

Upvotes: 12

Views: 14420

Answers (7)

Paulo Cheque
Paulo Cheque

Reputation: 2826

Summary

  1. Try running for your app only:

    python manage.py test YOUR_APP
    
  2. Check in your settings.py file if YOUR_APP is in INSTALLED_APPS config.

  3. Test method should start with test_, e.g.:

    def test_something(self):
        self.assertEquals(1, 2)
    
  4. If you are using a directory called tests instead of the tests.py file, check if it has a __init__.py file inside it.

  5. If you are using a tests directory, remove tests.pyc and tests.pyo files. (__pycache__ dir for Python3)

Upvotes: 21

Zarrie
Zarrie

Reputation: 333

After some time spent in searching I did not find anyone suggesting this, so I will share it as a late answer. In my case I have my manage.py in the root directory eg

.
...
├── dir
│   ├── project_name
│   ├── manage.py
│   ├── media
│   ├── app1
│   ├── static
│   ├── staticfiles
│   ├── templates
│   └── app2
...

so I found that the test command has the option to provide project which tests' to run. In my case I had to do this

python project_name/manage.py test ./project_name/

This successfully ran my tests.

Upvotes: 4

Spartacus
Spartacus

Reputation: 305

I had tried all these things but I neglected to add the __init__.py file in the tests directory that I created to hold all my tests and Django couldn't find it.

Upvotes: 3

Alasdair
Alasdair

Reputation: 308779

Try renaming your method test to something like test_content.

I believe the test runner will run all methods named test_* (see the python docs for organising test code. Django's TestCase is a subclass of unittest.TestCase, so the same rules should apply.

Upvotes: 7

pedro
pedro

Reputation: 431

You´ll need to use the prefix test_ for each test method.

Upvotes: 41

Manoj Govindan
Manoj Govindan

Reputation: 74675

There is something not quite right if you are getting the same result after renaming the file to tests.py. How are you running the tests? Are you doing so from the command line or have you set up a custom run target using Eclipse? Please try it from the command line if you haven't already.

Also fire up Django shell (python manage.py shell) and import your tests module.

from MyProj.forum.tests import SimpleTest

Does the import work correctly?

Upvotes: 3

simplyharsh
simplyharsh

Reputation: 36353

You have to name it tests.py .

Upvotes: 5

Related Questions