2017-02-09 69 views
0

我在舊的Rails應用程序(3.2.22)中使用Test :: Unit,並試圖測試一個服務類的命中外部api。無法正確解析JSON夾具測試

我使用webmock並試圖得到一個json文件夾具工作,但我不斷從json文件得到解析錯誤。

我的測試樁看起來是這樣的:

response_data = fixture_file_upload('easypost/order_response.json') 
stub_request(:post, 'https://api.easypost.com/v2/orders'). 
    to_return(:status => 200, :body => File.read(response_data)) 

order_response.json文件看起來像這樣:

{ 
    'mode':'test', 
    'reference':'Order', 
    'is_return':false, 
    'options':{'currency':'USD','label_date':null} 
} 

當我運行測試,我得到一個解析錯誤:

JSON::ParserError: 757: unexpected token at '{'mode':'test','reference':'Order','is_return':false,'options':{'currency':'USD','label_date':null}}' 

這是怎麼回事?

UPDATE:

得到它的工作由JSON文件中使用雙引號:

{ 
    "mode":"test", 
    "reference":"Order", 
    "is_return":false, 
    "options":{"currency":"USD","label_date":null} 
} 

任何人都可以解釋爲什麼這是必要的嗎?

回答

1

fine specification

A string is a sequence of zero or more Unicode characters, wrapped in double quotes, using backslash escapes.

和和對象是一組,其中鍵是字符串的鍵/值對:

enter image description here

這意味着,這樣的:

{ 
    'mode':'test', 
    'reference':'Order', 
    'is_return':false, 
    'options':{'currency':'USD','label_date':null} 
} 

不是JSON,因爲JSON字符串使用雙引號和雙引號,這只是類似於JSON的東西。當你切換到你的字符串雙引號:

{ 
    "mode":"test", 
    "reference":"Order", 
    "is_return":false, 
    "options":{"currency":"USD","label_date":null} 
} 

然後你有JSON,一切都應該工作。