【问题标题】:Learning Django Unit test of a Jsonresponse POST学习 Jsonresponse POST 的 Django 单元测试
【发布时间】:2015-11-01 08:35:03
【问题描述】:

我写了一个视图来处理发布和获取请求:

from django.http import JsonResponse, request
import json

def Dati(request):
if request.method == 'GET':
    dati = externalfunction()
    return JsonResponse(dati)

elif request.method == 'POST':
    data = json.loads(request.POST['json'])
    for item in data:
         print " POST DA clIENT:", item, data[item]

    # FEEDBACK 
    resp = {"ok":"ricevuto"}
    return JsonResponse(resp)

这里是 test.py

from rest_framework.test import APIClient
from myapp.views import Dati

class ComPageTest(TestCase):

def test_url_resolves_to_vista_Dati(self):
    found = resolve('/mixd/') 
    self.assertEqual(found.func, Dati) 

def test_Dati_GET(self):
    client = APIClient()
    response = client.get('/mixd/')   
    self.assertIn(b'power', response.content)

def test_Dati_POST(self):
    client = APIClient()
    response = client.post('/mixd/', {'power': 'on'}, format='json')
    self.assertIn(b'ok', response.content)

GET 测试运行正常,POST 返回此错误:

    2015-08-09 10:32:49,131 - ERROR - Internal Server Error: /mixd/
Traceback (most recent call last):
  File "/home/x/.virtualenvs/venvv/local/lib/python2.7/site-packages/django/core/handlers/base.py", line 132, in get_response
/datastructures.py", line 322, in __getitem__
    raise MultiValueDictKeyError(repr(key))
MultiValueDictKeyError: "'json'"
*** MultiValueDictKeyError: "'json'"

如果我手动访问该页面,一切似乎都很好 POST 似乎工作。 有什么特殊的语法要遵循吗?

【问题讨论】:

    标签: django unit-testing django-rest-framework


    【解决方案1】:

    您的post data 看起来像

    {'power': 'on'}
    

    那么request.POST['json'] 会得到MultiValueDictKeyError: "'json'" ?.Try

    client.post('/mixd/', json.dumps({'power': 'on'}),
                                    content_type="application/json")
    

    然后改变

    data = json.loads(request.POST['json'])
    

    data = json.loads(request.body)   #request.raw_post_data on Django < 1.4)
    

    【讨论】:

      猜你喜欢
      • 2012-04-21
      • 1970-01-01
      • 2011-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多