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}

希望对您有所帮助!