soc*_*soc 3 ruby hash symbols rspec
我没有使用Rails,而是使用Ruby和RSpec,并试图通过哈希对测试。正确的结果是通过IRB进行的,但是测试仍然包括使测试失败的分号。
这是RSpec测试:
describe Menu do
let(:menu) { described_class.new }
let(:book) { double :book, name: 'Clockwise to Titan', price: 6 }
it 'can add a dish to the menu list' do
menu.add(book)
expect(menu.list).to eq({'Clockwise to Titan': 6})
end
end
Run Code Online (Sandbox Code Playgroud)
这是失败的地方:
Failures:
1) Menu can add a dish to the menu list
Failure/Error: expect(menu.list).to eq({'Clockwise to Titan': 6})
expected: {:"Clockwise to Titan"=>6}
got: {"Clockwise to Titan"=>6}
(compared using ==)
Diff:
@@ -1,2 +1,2 @@
-:"Clockwise to Titan" => 6,
+"Clockwise to Titan" => 6,
# ./spec/menu_spec.rb:9:in `block (2 levels) in <top (required)>'
Run Code Online (Sandbox Code Playgroud)
我在Stack Overflow上找到了许多有关HashWithIndifferentAccess解决的类似问题的参考,但是我没有使用Rails。另外,有时建议的stringify_keys方法不起作用。
从看起来的代码,您应该更改:
expect(menu.list).to eq({'Clockwise to Titan': 6})
Run Code Online (Sandbox Code Playgroud)
至
expect(menu.list).to eq({'Clockwise to Titan' => 6})
Run Code Online (Sandbox Code Playgroud)
使规格通过。
您遇到的问题是,您定义了hash一个键,其中键不是String,而是a Symbol。
考虑一下:
{'Clockwise to Titan': 6} == {:'Clockwise to Titan' => 6}
Run Code Online (Sandbox Code Playgroud)
但
{'Clockwise to Titan': 6} != {'Clockwise to Titan' => 6}
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助!