我正在开发一个 django 项目,该项目将用作 webhook 的端点。 webhook 会将一些 JSON 数据发布到我的端点,然后它将解析该数据。我正在尝试为它编写单元测试,但我不确定我是否正确发送了 JSON。
我在 pipeline_endpoint 中不断收到“TypeError:字符串索引必须是整数”
代码如下:
# tests.py
from django.test import TestCase
from django.test.client import Client
import simplejson
class TestPipeline(TestCase):
def setUp(self):
"""initialize the Django test client"""
self.c = Client()
def test_200(self):
json_string = u'{"1": {"guid": "8a40135230f21bdb0130f21c255c0007", "portalId": 999, "email": "fake@email"}}'
json_data = simplejson.loads(json_string)
self.response = self.c.post('/pipeline-endpoint', json_data, content_type="application/json")
self.assertEqual(self.response.status_code, "200")
和
# views.py
from pipeline.prospect import Prospect
import simplejson
def pipeline_endpoint(request):
#get the data from the json object that came in
prospects_json = simplejson.loads(request.raw_post_data)
for p in prospects_json:
prospect = {
'email' : p['email'],
'hs_id' : p['guid'],
'portal' : p['portalId'],
}
编辑:整个回溯。
======================================================================
ERROR: test_200 (pipeline.tests.TestPipeline)
----------------------------------------------------------------------
Traceback (most recent call last):
File "F:\......\pipeline\tests.py", line 31, in test_200
self.response = self.c.post('/pipeline-endpoint', json_string, content_type="application/json")
File "C:\Python27\lib\site-packages\django\test\client.py", line 455, in post
response = super(Client, self).post(path, data=data, content_type=content_type, **extra)
File "C:\Python27\lib\site-packages\django\test\client.py", line 256, in post
return self.request(**r)
File "C:\Python27\lib\site-packages\django\core\handlers\base.py", line 111, in get_response
response = callback(request, *callback_args, **callback_kwargs)
File "F:\......\pipeline\views.py", line 18, in pipeline_endpoint
'email' : p['email'],
TypeError: string indices must be integers
----------------------------------------------------------------------
Ran 1 test in 0.095s
FAILED (errors=1)
Destroying test database for alias 'default'...
最佳答案
@mrmagooey 是对的
def test_your_test(self):
python_dict = {
"1": {
"guid": "8a40135230f21bdb0130f21c255c0007",
"portalId": 999,
"email": "fake@email"
}
}
response = self.client.post('/pipeline-endpoint/',
json.dumps(python_dict),
content_type="application/json")
使用 json.dumps
而不是 json.loads
https://stackoverflow.com/questions/8583290/
相关文章:
java - 如何在 Eclipse 中导入 javax.json
java - Gson 将一组数据对象转换为 json - Android
json - Newtonsoft 对象 → 获取 JSON 字符串
python - Django: "TypeError: [] is not JSON serial
json - 如何在所有子项中查询具有特定值的属性的firebase
ajax - 为什么 jqXHR.responseText 返回字符串而不是 JSON 对象?
javascript - 如何在 JSON 中存储 javascript 函数
c# - 配置 JSON.NET 以忽略 DataContract/DataMember 属性