Existe um correspondente RSpec2 para Hashes correspondentes?

Nota para futuros leitores: acha que o RSpec não considera seus Hashes iguais? Pode-se ser um OrderedHash, mas da saída regular do RSpec você não pode dizer. Este foi o problema que levou a este post.

Pergunta original:

Suponha que eu tenha uma especificação na qual desejo testar se um método gera o Hash apropriado.

it 'should generate the Hash correctly' do
  expected = {:foo => 1, 'baz' => 2}
  subject.some_method_that_should_generate_the_hash.should == expected
end

Isso geralmente falha, porque Hashes diferentes com os mesmos pares de valores-chave podem retornar seus pares em uma ordem diferente. Os resultados são assim:

Failure/Error: subject.some_method_that_should_generate_the_hash.should == expected
expected: {:foo => 1, 'baz' => 2},
     got: {'baz' => 2, :foo => 1}

Para matrizes, isso é resolvido usando o operador = ~. No entanto, isso não funciona para Hashes. Por enquanto, eu recorri a

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

mas isso parece desnecessariamente detalhado. Espero que exista uma solução óbvia para isso. Estou negligenciando algo nos documentos ou o RSpec não tem um Matcher adequado para igualdade de hash sem ordem?

questionAnswers(3)

yourAnswerToTheQuestion