Last active
September 20, 2023 06:19
-
-
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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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='[email protected]', 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='[email protected]', 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) |
Thanks!
Awesome!
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Thanks.. I was dealing with the requestFactory, session and messages in test, and this is very useful to me.