将来の読者への注意:RSpecはあなたのハッシュが等しいとは見なさないと思いますか?1つはOrderedHashかもしれませんが、通常のRSpec出力からはわかりません。これがこの投稿を促した問題でした。
元の質問:
メソッドが適切なハッシュを生成することをテストしたい仕様があるとします。
it 'should generate the Hash correctly' do
expected = {:foo => 1, 'baz' => 2}
subject.some_method_that_should_generate_the_hash.should == expected
end
同じキーと値のペアを持つ異なるハッシュが異なる順序でペアを返す可能性があるため、これは失敗することがよくあります。結果は次のようになります。
Failure/Error: subject.some_method_that_should_generate_the_hash.should == expected
expected: {:foo => 1, 'baz' => 2},
got: {'baz' => 2, :foo => 1}
配列の場合、これは=〜演算子を使用して解決されます。ただし、それはハッシュでは機能しません。今のところ、私はに頼ってきました
it 'should generate the Hash correctly' do
expected = {:foo => 1, 'baz' => 2}
subject.some_method_that_should_generate_the_hash.each {|k,v|
v.should == expected[k]
}
end
しかし、それは不必要に冗長に思えます。これには明らかな解決策があると思います。ドキュメントで何かを見落としているのでしょうか、それともRSpecに順序のないハッシュの同等性のための適切なマッチャーがないのでしょうか。