¿Existe un emparejador RSpec2 para hacer coincidir hashes?

Nota para futuros lectores: ¿crees que RSpec no considera iguales tus hashes? Uno podría ser un OrderedHash, pero a partir de la salida RSpec normal no se puede saber. Este fue el problema que provocó esta publicación.

Pregunta original

Supongamos que tengo una especificación donde quiero probar que un método genera el hash apropiado.

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

Esto a menudo falla, porque diferentes hashes con los mismos pares clave-valor pueden devolver sus pares en un orden diferente. Los resultados se ven así:

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

Para las matrices, esto se resuelve utilizando el operador = ~. Sin embargo, eso no funciona para Hashes. Por ahora, he recurrido 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

pero eso parece innecesariamente detallado. Espero que haya una solución obvia para esto. ¿Estoy pasando por alto algo en los documentos o RSpec no tiene un Matcher adecuado para la igualdad de Hash sin orden?

Respuestas a la pregunta(3)

Su respuesta a la pregunta