如何在Djangounit testing中获取请求对象?
我有一个function
def getEvents(eid, request): ......
现在我想单独为上面的函数编写unit testing(不调用视图)。 那么我应该如何在TestCase
调用上述内容。 是否有可能创build请求?
看这个解决scheme :
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)
如果你正在使用djangotesting客户端( from django.test.client import Client
),你可以像访问响应对象一样访问请求:
from django.test.client import Client client = Client() response = client.get(some_url) request = response.wsgi_request
或者如果您正在使用django.TestCase
( from django.test import TestCase, SimpleTestCase, TransactionTestCase
),则只需键入self.client
即可访问任何testing用例中的客户端实例:
response = self.client.get(some_url) request = response.wsgi_request
使用RequestFactory
创build一个虚拟请求。
你的意思是def getEvents(request, eid)
对吗?
使用Django的unittest,你可以使用from django.test.client import Client
来提出请求。
看到这里: testing客户端
@ Secator的答案是完美的,因为它创build了一个模拟对象,这真的是一个非常好的unit testing的首选。 但是根据你的目的,使用Django的testing工具可能会更容易。
你可以使用djangotesting客户端
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
更多细节
https://docs.djangoproject.com/en/1.11/topics/testing/tools/#overview-and-a-quick-example