1

我正在构建一个 REST API,Django在某些地方我需要发送带有许多参数的 HTTP GET。因此,我决定在 request.body 中将它们作为 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。

4

2 回答 2

0

我希望有人知道一个隐藏的功能。无论如何,我找到的解决方法是Python Requests模块,但在这种情况下,应该在单元测试中使用LiveServerTestCase该类。Requests 允许在正文中发送 JSON 内容。TestCaseDjango

于 2014-05-28T11:32:20.643 回答
0

Get方法不创建请求正文,您需要使用post,putpatch.

于 2014-05-27T14:47:51.383 回答