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?