2

当我从一个返回带有字符串键的哈希的 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)

但是我如何使用新的 ruby​​ 哈希表示法。就像是:

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

我无法将服务中的响应更改为符号键。我必须忍受新旧符号的混合吗?

编辑 我在主题中更改了一个词。它是一个带有字符串键的散列。

4

2 回答 2

0

如果散列是字符串键,则不能使用新的表示法。只有符号。

如果您真的想使用符号进行访问,一种选择是导入 Rails ActiveSupport并使用它们的Indifferent Access函数。它添加了另一个需要管理的依赖项,但也可以帮助您保持代码更清洁。

于 2013-06-18T15:45:57.007 回答
0

好像您的网络服务返回 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)
于 2013-06-18T16:11:57.750 回答