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 ?
Django uses request and response objects to pass state through the system. When a page is requested, Django creates an HttpRequest object that contains metadata about the request. Then Django loads the appropriate view, passing the HttpRequest as the first argument to the view function.
If your tests make any database queries, use subclasses TransactionTestCase or TestCase . SimpleTestCase. databases. SimpleTestCase disallows database queries by default. This helps to avoid executing write queries which will affect other tests since each SimpleTestCase test isn't run in a transaction.
self. client , is the built-in Django test client. This isn't a real browser, and doesn't even make real requests. It just constructs a Django HttpRequest object and passes it through the request/response process - middleware, URL resolver, view, template - and returns whatever Django produces.
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
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 love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With