2016-12-28 4 views
1

Я пишу тестов для API с использованием фреймворка Django, метод GET, кажется, работает все в порядке, но когда дело доходит до POST сообщение об ошибке всегда появляется:«ДИКТ» объект имеет атрибута «данные»

'dict' object has no attribute 'data'.

Точная ошибка,

res = respo.post({'ticker': 'FIB','open': 7.0,'close':8.0,'volume':200}) File "C:\Users\sathya.m\Desktop\mydsite\companies\views.py", line 32, in post serializer = StockSerializer(data=request.data) AttributeError: 'dict' object has no attribute 'data'

views.py

def post(self,request): 
    serializer = StockSerializer(data=request.data) 
    if serializer.is_valid(): 
     serializer.save() 
     return Response(serializer.data, status=200) 

tests.py

def test_getDataDetails(self): 
    respo = StockList() 
    resp = respo.get({'username':'admin','password':'pass'}) 
    res = respo.post({'ticker': 'FIB','open': 7.0,'close':8.0,'volume':200}) 
    self.assertEqual(res.status_code,200) 
+1

Вы должны использовать 'request.POST' вместо' request.data' –

+0

Спасибо за ваш ответ. – Rubi

+0

Ошибка ниже: AssertionError: 403! = 200 – Rubi

ответ

1

Ваш взгляд Надевать и пост методы ожидают объект запроса в качестве аргумента, а не Dict. Вы должны либо предоставить этот запрос объект самостоятельно или использовать тестовый клиент Джанго (КФ части о тестировании в мелком руководстве)

+0

Спасибо, Бруно. Теперь я использовал тестовый клиент. – Rubi

+0

Спасибо, Бруно. Теперь я использовал тестовый клиент. c = Клиент() c.auth = HTTPBasicAuth ('admin', 'pass') " response = c.post ('/ stocks /', json = {'id': 4, 'ticker': ' FIB ',' open ': 7.0,' close ': 8.0,' volume ': 200,' owner_id ': 1}) self.assertEqual (response.status_code, 200) – Rubi

+0

Получена ошибка ответа: – Rubi

0

Post работает нормально, с помощью этого ниже кода:

def test_getUserDetails(self): 
     url = '/user/' 
     data = {"username": "Ramu", "first_name": "Ram", "last_name": "Ram", "email": "[email protected]"} 
     headers = {'Content-Type': 'application/json'} 
     r = requests.post(url, data=json.dumps(data), headers=headers) 
     self.assertEqual(r.status_code,201) 
Смежные вопросы