2013-06-18 46 views
1

當我從webservice得到響應,它返回一個帶有字符串鍵的散列,我必須像這樣讀取它們:如何在RSpec中的字符串鍵模擬來自web服務中的紅寶石新散列符號

foo = @web_service.get_foo 
if foo["code"] == 200 
    # do something 
end 

在RSpec的我不得不嘲笑這個Web服務,並返回字符串的哈希值,因爲我查了字符串鍵「代碼」。

@web_service.should_receive(:get_foo).and_return("code" => 200) 

但我如何用新的紅寶石散列符號。類似於:

@web_service.should_receive(:get_foo).and_return("code": 200) 

我不能將服務中的響應更改爲符號密鑰。 我有沒有與舊的和新的符號組合?

編輯 我改變了主題中的一個詞。它是一個帶有字符串鍵的散列。

回答

0

如果散列是一個字符串鍵,則無法使用新的表示法。只有符號。

如果您真的想要使用符號進行訪問,一種方法是導入Rails ActiveSupport並使用它們的Indifferent Access函數。它增加了另一個依賴項來管理,但可以幫助保持代碼更清潔。

0

看起來像您的Web服務返回JSON。你可以讓解析器鍵轉換爲符號:

require 'multi_json' 
MultiJson.load('{"code":200}', symbolize_keys: true) 
# => {:code=>200} 

這將允許您更改您的代碼

foo = @web_service.get_foo 
if foo[:code] == 200 
    # do something 
end 

和你的天賦來

@web_service.should_receive(:get_foo).and_return(code: 200) 
+0

它不工作,因爲它是使用字符串鍵而不是字符串的散列 – Piioo

+0

您是否實現了'get_foo'或者它是否由gem/library提供? – Stefan

+0

由圖書館提供。我不能在那裏進行更改 – Piioo