Un RSpec2 matcher pour la mise en correspondance des Hachages existent?
Note pour les futurs lecteurs: pensez à RSpec ne pas tenir compte de votre Hachages de l'égalité? On peut être un OrderedHash, mais de l'ordinaire RSpec de sortie, vous ne pouvez pas dire. C'était le problème qui a motivé ce post.
Question d'origine:
Supposons que j'ai un spec où je veux tester une méthode génère le Hachage.
it 'should generate the Hash correctly' do
expected = {:foo => 1, 'baz' => 2}
subject.some_method_that_should_generate_the_hash.should == expected
end
Cette échoue souvent, parce que les différents Hachages avec les mêmes paires clé-valeur peut retourner leurs paires dans un autre commandés. Résultats ressemblent:
Failure/Error: subject.some_method_that_should_generate_the_hash.should == expected
expected: {:foo => 1, 'baz' => 2},
got: {'baz' => 2, :foo => 1}
Pour les tableaux, c'est résolu en utilisant l' =~ opérateur. Toutefois, cela ne fonctionne pas pour les tables de hachage. Pour l'instant, j'ai eu recours à
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
mais qui semble inutilement verbeux. J'attends qu'il y ait une solution évidente pour cette. Suis-je surplombant quelque chose dans les docs ou ne pas RSpec avoir un bon Comparateur pour les sans ordre de Hachage de l'égalité?
OriginalL'auteur Confusion | 2011-01-18
Vous devez vous connecter pour publier un commentaire.
Passe. Je ne suis pas sûr de ce qui se passe dans votre cas particulier. Avez-vous l'échec des exemples que vous pouvez partager?
De programmation Ruby a ceci à dire:
Intéressant. Donc un OrderedHash et un Hachage avec les mêmes paires clé/valeur sont pas considérées comme égales -- c'est bon à savoir.
OriginalL'auteur zetetic
Depuis 8 mois, le gem
rspec-matchers
a l'appui pour la mise en correspondance des hachages:voir ici pour plus de détails: https://github.com/rspec/rspec-expectations/pull/79
.to eql(x)
œuvresOriginalL'auteur Niklas Hofer
Je crois que le eql? méthode vérifie seulement que les deux hachages ont le même contenu
Donc, autant que je me souvienne dans Rspec2 que vous pouvez faire:
Et le test doit passer
expect(x).to eql(y)
OriginalL'auteur Olives