在Django REST API单元测试中,如何在client.get()函数中发送JSON参数作为请求体?
我正在用Django
构建一个REST API,在某些地方我需要发送带有很多参数的HTTP GET请求。为了处理这个问题,我决定把这些参数作为JSON格式放在请求的主体中。现在,应用程序运行得很好,但单元测试却不行。我找不到用self.client.get()发送JSON参数的方法。这是我现在的做法:
import json
from django.test import TestCase
from django.core.urlresolvers import reverse
class RestApiTests(TestCase):
def test_analysis():
extra = {'CONTENT_TYPE': 'application/json'}
resp = self.client.get(reverse('restapi_analysis'), data="{'analysisID': 41}", **extra)
self.assertEqual(json.loads(resp.content)['statusText'], 'Analysis fetched successfully')
使用这个方法运行单元测试时,我遇到了以下错误:
Traceback (most recent call last):
File "/home/anascu/svn/django-tc-reporting/tcsite/tcapp/tests/test_restapi.py", line 151, in test_analysis
resp = self.client.get(reverse('restapi_analysis'), data="{'analysisID': 41}", **extra)
File "/home/anascu/virtenv/tc-tracker/local/lib/python2.7/site-packages/django/test/client.py", line 439, in get
response = super(Client, self).get(path, data=data, **extra)
File "/home/anascu/virtenv/tc-tracker/local/lib/python2.7/site-packages/django/test/client.py", line 240, in get
'QUERY_STRING': urlencode(data, doseq=True) or parsed[4],
File "/home/anascu/virtenv/tc-tracker/local/lib/python2.7/site-packages/django/utils/http.py", line 75, in urlencode
for k, v in query],
ValueError: need more than 1 value to unpack
POST请求可以正常工作,但在这种情况下我需要使用GET请求。这可能吗?我使用的Django版本是1.4.5。
2 个回答
0
我希望有人知道一个隐藏的功能。不过,我找到的解决办法是使用 Python Requests
模块。不过在这种情况下,应该在 Django
单元测试中使用 LiveServerTestCase
类,而不是 TestCase
。Requests 允许在请求的主体中发送 JSON 内容。
0
Get
方法不会生成请求的内容,你需要使用 post
、put
或 patch
方法。