由于符号而不是Rails,散列失败的RSpec测试

时间:2015-04-21 11:53:32

标签: ruby hash rspec symbols

我没有使用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方法无效。

1 个答案:

答案 0 :(得分:4)

从代码看起来,你应该改变:

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}

希望这有帮助!