Pracuję nad django projektem, który będzie służyć jako punkt końcowy dla webhooka. Webhook będzie POST niektóre dane JSON do mojego punktu końcowego, który następnie przeanalizuje te dane. Próbuję napisać testy jednostkowe, ale nie jestem pewien, czy wysyłam JSON poprawnie.Wysyłanie JSON za pomocą klienta testowego django
ciśgle "TypeError: indeksy łańcuchowe muszą być liczbami całkowitymi" w pipeline_endpoint
Oto kod:
# 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": "[email protected]"}}'
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")
i
# 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'],
}
Edit: cały traceback.
======================================================================
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'...
Proszę pokazać cały okres śledzenia –
zaktualizowany przy pomocy traceback! –
Czy to ... ponieważ powinieneś używać 'json.dumps' (z obiektem Pythona) zamiast' json.loads' (z ciągiem znaków), a więc wysyłasz obiekt Pythona na żądanie klienta niż obiekt Pythona zserializowany jako obiekt JSON? – mrmagooey