how to get request object in django unit testing?

前端 未结 5 755
悲&欢浪女
悲&欢浪女 2020-12-12 22:15

I have a function as

def getEvents(eid, request):
    ......

Now I want to write unit test for the above function separately (without calli

相关标签:
5条回答
  • 2020-12-12 22:23

    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)
    
    0 讨论(0)
  • 2020-12-12 22:36

    Use RequestFactory to create a dummy request.

    0 讨论(0)
  • 2020-12-12 22:37

    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
    
    0 讨论(0)
  • 2020-12-12 22:37

    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

    0 讨论(0)
  • 2020-12-12 22:39

    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.

    0 讨论(0)
提交回复
热议问题