RSpec 哈希测试因符号而不是 Rails 而失败
RSpec test of hash failing due to symbol, not Rails
我没有使用 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
这是失败的原因:
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)>'
我在 Stack Overflow 上找到了很多关于 HashWithIndifferentAccess 解决的类似问题的参考资料,但我没有使用 Rails。此外,有时建议的 stringify_keys 方法不起作用。
从代码来看,您应该更改:
expect(menu.list).to eq({'Clockwise to Titan': 6})
到
expect(menu.list).to eq({'Clockwise to Titan' => 6})
使规范通过。
您的问题是,您定义了一个 hash
,其中的键不是 String
,而是 Symbol
。
考虑一下:
{'Clockwise to Titan': 6} == {:'Clockwise to Titan' => 6}
但是
{'Clockwise to Titan': 6} != {'Clockwise to Titan' => 6}
希望对您有所帮助!
我没有使用 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
这是失败的原因:
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)>'
我在 Stack Overflow 上找到了很多关于 HashWithIndifferentAccess 解决的类似问题的参考资料,但我没有使用 Rails。此外,有时建议的 stringify_keys 方法不起作用。
从代码来看,您应该更改:
expect(menu.list).to eq({'Clockwise to Titan': 6})
到
expect(menu.list).to eq({'Clockwise to Titan' => 6})
使规范通过。
您的问题是,您定义了一个 hash
,其中的键不是 String
,而是 Symbol
。
考虑一下:
{'Clockwise to Titan': 6} == {:'Clockwise to Titan' => 6}
但是
{'Clockwise to Titan': 6} != {'Clockwise to Titan' => 6}
希望对您有所帮助!