2016-12-06 43 views
0

我試着四處尋找答案,並給了它很多嘗試,但這裏有一些奇怪的事情發生。我在我看來有一些功能是通過AJAX進入JSON數據的。目前我正在嘗試對這些進行一些單元測試。Django和JSON/AJAX測試

在我的測試情況下,我有:

kwargs = {'HTTP_X_REQUESTED_WITH': 'XMLHttpRequest'} 
url = '/<correct_url>/upload/' 
data = { 
       "id" : p.id 
} 

c = Client() 
response = c.delete(url, data, **kwargs) 

content_unicode = response.content.decode('utf-8') 
content = json.loads(content_unicode) 

p.id僅僅是來自於我使用的模型的整數。

我然後有被測試的功能,這些部分看起來像如下:

def delete_ajax(self, request, *args, **kwargs): 
    print (request.body) 
    body_unicode = request.body.decode('utf-8') 
    print (body_unicode) 
    body_json = json.loads(body_unicode) 

第一打印語句產率:

.....b"{'id': 1}" 

另一種:

{'id': 1} 

最後我得到第四行的錯誤如下:

json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes: line 1 column 2 (char 1) 

這裏怎麼回事?我知道正確的JSON格式應該是{"id": 1},這就是我從測試用例發送的內容。但一路上單引號引入組合引起我頭痛。

有什麼想法?

回答

1

你需要一個JSON字符串傳遞給Client.delete(),而不是Python字典:

kwargs = {'HTTP_X_REQUESTED_WITH': 'XMLHttpRequest'} 
url = '/<correct_url>/upload/' 
data = json.dumps({ 
"id" : p.id 
}) 

c = Client() 
response = c.delete(url, data, **kwargs) 

你也應該設置Content-Type頭爲 「application/JSON」,檢查內容類型頭在你的但這是另一個話題。

+0

謝謝!在你答案之前,我幾乎已經知道了,但你還是更快。內容類型檢查是下一個照顧的事情:) – xtrom0rt