Django Unit Test

Below is a collection of django unit test cases.

Test URL can be visited with status code 200

1
2
3
4
5
6
7
8
9
10
from django.core.urlresolvers import reverse
from django.test import TestCase

class HomeTests(TestCase):

def test_home_view_status_code(self):

url = reverse('home')
response = self.client.get(url)
self.assertEquals(response.status_code, 200)

Test URL response with status code 404

1
2
3
4
5
6
7
8
9
10
11
class BoardTopicsTests(TestCase):

def setUp(self):

Board.objects.create(name='Django', description='Django board.')

def test_board_topics_view_not_found_status_code(self):

url = reverse('board_topics', kwargs={'pk': 99})
response = self.client.get(url)
self.assertEquals(response.status_code, 404)

Test URL and view function

1
2
3
4
5
6
class HomeTests(TestCase):

def test_home_url_resolves_home_view(self):

view = resolve('/')
self.assertEquals(view.func, home)

Test HTML contains the correct URL

1
2
3
4
5
6
7

class HomeTests(TestCase):

def test_home_view_contains_link_to_topics_page(self):

board_topics_url = reverse('board_topics', kwargs={'pk': self.board.pk})
self.assertContains(self.response, 'href="{0}"'.format(board_topics_url))

Test HTML contains CSRF token

1
2
3
4
5
6
7
class NewTopicTests(TestCase):

def test_csrf(self):

url = reverse('new_topic', kwargs={'pk': 1})
response = self.client.get(url)
self.assertContains(response, 'csrfmiddlewaretoken')

Test HTML contains form

1
2
3
4
5
6
def test_contains_form(self):  # <- new test

url = reverse('new_topic', kwargs={'pk': 1})
response = self.client.get(url)
form = response.context.get('form')
self.assertIsInstance(form, NewTopicForm)

Test form validation errors

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

def test_new_topic_invalid_post_data(self): # <- updated this one

'''

Invalid post data should not redirect

The expected behavior is to show the form again with validation errors

'''

url = reverse('new_topic', kwargs={'pk': 1})

response = self.client.post(url, {})

form = response.context.get('form')

self.assertEquals(response.status_code, 200)

self.assertTrue(form.errors)

Test redirection

1
2
3
def test_redirection(self):

self.assertRedirects(self.response, self.home_url)

Test whether user is login

1
2
3
4
5
6
7
8
9
10
def test_user_authentication(self):
'''
Create a new request to an arbitrary page.
The resulting response should now have a `user` to its context,
after a successful sign up.
'''

response = self.client.get(self.home_url)
user = response.context.get('user')
self.assertTrue(user.is_authenticated)

Test form fields

1
2
3
4
5
6
7
8
9
10
11
from django.test import TestCase
from ..forms import SignUpForm

class SignUpFormTest(TestCase):

def test_form_has_fields(self):

form = SignUpForm()
expected = ['username', 'email', 'password1', 'password2',]
actual = list(form.fields)
self.assertSequenceEqual(expected, actual)
0%