如何在django单元测试中获取请求对象?

use*_*121 50 python django django-testing

我有一个功能

def getEvents(eid, request):
    ......
Run Code Online (Sandbox Code Playgroud)

现在我想分别为上面的函数编写单元测试(不调用视图).那么我该如何调用上面的内容呢TestCase?是否可以创建请求?

Mar*_*mro 82

请参阅此解决方案:

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)
Run Code Online (Sandbox Code Playgroud)

  • 自1.3版以来,此代码实际上已包含在Django中.请在此处参阅[文档](https://docs.djangoproject.com/en/1.4/topics/testing/#django.test.client.RequestFactory). (4认同)
  • 更新文档[link](https://docs.djangoproject.com/en/1.9/topics/testing/advanced/#example) (3认同)
  • 如果我正确地看到这一点,那么来自工厂的虚假请求不会通过中间件被过滤。 (2认同)

Ant*_*kiy 27

如果您使用的是django test client(from django.test.client import Client),则可以从响应对象访问请求,如下所示:

from django.test.client import Client

client = Client()
response = client.get(some_url)
request = response.wsgi_request
Run Code Online (Sandbox Code Playgroud)

或者如果您正在使用django.TestCase(from django.test import TestCase, SimpleTestCase, TransactionTestCase),只需键入self.client以下内容即可访问任何测试用例中的客户端实例:

response = self.client.get(some_url)
request = response.wsgi_request
Run Code Online (Sandbox Code Playgroud)


Dan*_*man 11

使用RequestFactory 创建一个虚拟请求.