I have a function as
def getEvents(eid, request):
......
Now I want to write unit test for the above function separately (without calling the view).
So how should I call the above in TestCase
. Is it possible to create request ?
I have a function as
def getEvents(eid, request):
......
Now I want to write unit test for the above function separately (without calling the view).
So how should I call the above in TestCase
. Is it possible to create request ?
See this solution:
from django.utils import unittest
from django.test.client import RequestFactory
class SimpleTest(unittest.TestCase):
def setUp(self):
# Every test needs access to the request factory.
self.factory = RequestFactory()
def test_details(self):
# Create an instance of a GET request.
request = self.factory.get('/customer/details')
# Test my_view() as if it were deployed at /customer/details
response = my_view(request)
self.assertEqual(response.status_code, 200)
If you are using django test client (from django.test.client import Client
) you can access request from response object like this:
from django.test.client import Client
client = Client()
response = client.get(some_url)
request = response.wsgi_request
or if you are using django.TestCase
(from django.test import TestCase, SimpleTestCase, TransactionTestCase
) you can access client instance in any testcase just by typing self.client
:
response = self.client.get(some_url)
request = response.wsgi_request
Use RequestFactory
to create a dummy request.
You can use django test client
from django.test import Client
c = Client()
response = c.post('/login/', {'username': 'john', 'password': 'smith'})
response.status_code
response = c.get('/customer/details/')
response.content
for more details
https://docs.djangoproject.com/en/1.11/topics/testing/tools/#overview-and-a-quick-example
You mean def getEvents(request, eid)
right?
With Django unittest, you can use the from django.test.client import Client
to make request.
See here: Test Client
@Secator's answer is prefect as it creates a mock object which is really preferred for a really good unittest. But depending on your purpose, it might be easier to just use Django's test tools.