19

次の RSpec スニペットを検討してください。

it "should match" do
  {:a => 1, :b => 2}.should =~ {"a" => 1, "b" => 2}
end

1 つのハッシュはキーに記号を使用し、もう 1 つのハッシュはキーに文字列を使用するため、このテストは失敗します。私の場合、1 つのハッシュは解析された JSON オブジェクトであり、もう 1 つはオブジェクトを作成したハッシュです。対等に比較してほしい。

独自のマッチャーを作成する前に、または両方のハッシュに文字列キーを強制する前に、この (一般的な) ケースを処理するマッチャーまたは手法はありますか?

4

4 に答える 4

24

あなたがすることができます:

it "should match" do
    {:a => 1, :b => 2}.stringify_keys.should =~ {"a" => 1, "b" => 2}
end
于 2012-08-06T17:39:44.480 に答える
1

最も簡単な方法は、文字列を取得する場合は文字列を配置し、記号を取得する場合は記号を配置するなど、取得するものと一致するように記述することです。

それができない場合、私がすることは次のようなものです:

it "should match" do
  {:a => 1}.with_indifferent_access.should =~ {'a' => 1}.with_indifferent_access
end
于 2012-08-06T17:28:45.580 に答える
0

HashWithIndifferentAccess聞いたことはありませんが、レール内でこの問題を解決する active_supports を見ることができます: http://apidock.com/rails/ActiveSupport/HashWithIndifferentAccess

于 2012-08-06T17:24:00.673 に答える