Skip to content

Instantly share code, notes, and snippets.

@dkarchmer
Last active September 20, 2023 06:19
Show Gist options
  • Star 12 You must be signed in to star a gist
  • Fork 4 You must be signed in to fork a gist
  • Save dkarchmer/99a35f00503458a4fa3088f5c8215381 to your computer and use it in GitHub Desktop.
Save dkarchmer/99a35f00503458a4fa3088f5c8215381 to your computer and use it in GitHub Desktop.
Sample code for using RequestFactory to do Django Unit Testing - Get and Post
from django.test import TestCase, RequestFactory
from django.utils.importlib import import_module
from django.contrib.auth import get_user_model
from django.core.urlresolvers import reverse
from django.contrib.sessions.middleware import SessionMiddleware
from django.contrib.messages.middleware import MessageMiddleware
from rest_framework import status
from .models import *
from .views import *
from .forms import *
class VendorJobRequestCreateTest(TestCase):
def setUp(self):
# Every test needs access to the request factory.
self.factory = RequestFactory()
self.u1 = user_model.objects.create_user(username='User1', email='user1@foo.com', password='pass')
self.u1.is_active = True
self.u1.is_staff = True
self.u1.save()
self.u2 = user_model.objects.create_user(username='User2', email='user2@foo.com', password='pass')
self.u2.is_active = True
self.u2.save()
def tearDown(self):
user_model.objects.all().delete()
def setup_request(self, request):
request.user = self.u2
"""Annotate a request object with a session"""
middleware = SessionMiddleware()
middleware.process_request(request)
request.session.save()
"""Annotate a request object with a messages"""
middleware = MessageMiddleware()
middleware.process_request(request)
request.session.save()
request.session['some'] = 'some'
request.session.save()
def testGet(self):
url = reverse('some_view')
request = self.factory.get(url)
self.setup_request(request)
view = SomeCreateView.as_view()
response = view(request)
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertEqual(response.template_name[0], 'some_template.html')
def testPost(self):
url = reverse('some_view')+'?arg={0}'.format(self.some.id)
form_data = {
'data1': '1',
'data2': 2
}
request = self.factory.post(url, data=form_data)
self.setup_request(request)
view = SomeCreateView.as_view()
response = view(request)
self.failUnlessEqual(response.status_code, status.HTTP_302_FOUND)
self.assertEqual(SomeModel.objects.count(), 0)
@Huertix
Copy link

Huertix commented Dec 4, 2016

Thanks.. I was dealing with the requestFactory, session and messages in test, and this is very useful to me.

@DusanMadar
Copy link

Thanks!

@mimischi
Copy link

Awesome!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment