Reputation: 123
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
Reputation: 2826
Summary
Try running for your app only:
python manage.py test YOUR_APP
Check in your settings.py
file if YOUR_APP is in INSTALLED_APPS
config.
Test method should start with test_
, e.g.:
def test_something(self):
self.assertEquals(1, 2)
If you are using a directory called tests
instead of the tests.py
file, check if it has a __init__.py
file inside it.
If you are using a tests
directory, remove tests.pyc
and tests.pyo
files. (__pycache__
dir for Python3)
Upvotes: 21
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
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
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
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