Wie Vergleiche ich zwei hashes in RSpec?
Habe ich zwei hashes h1
und h2
dass ich möchte, zu vergleichen, in RSpec.
Möchte ich überprüfen, dass die Elemente der h1
sind die gleichen wie h2
nach einiger transformation, die wir nennen f
. Das heißt, ich möchte, um zu überprüfen, dass für jede Taste k
im h1
, h1[k] == f(h2[k])
.
Zum Beispiel, wenn alle Werte in h2
sind doppelt so groß wie die entsprechenden Werte in h1
sind, dann möchte ich schauen, dass für jeden Schlüssel k
im 1. Halbjahr h2[k] == h1[k] * 2
.
Was ist der richtige Weg, dies zu tun in RSpec? Zurzeit mache ich:
h1 = ...
expect(
h2.all? { |k,v|
v == f(h1[k])
}
).to be true
aber das scheint umständlich.
- Ich würde eine helper-Methode
equal?(other)
hat die Kalkulation-von dort ausexpect(h2.equal?(h1)).to be true
- Deine Frage ist sehr irreführend. Sie wechseln die Rolle der
h1
undh2
in Ihrer Erklärung und in Ihrem code. - Auch deine Beschreibung (und der code) beschreibt, dass die Abstimmung ist ein Weg, D. H., es spielt keine Rolle, ob
h2
im Erklärungstext hat die Schlüssel andere als das, wash1
hat. Ist es das, was Sie beabsichtigen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Klingt wie das, was Sie testen, ist die transformation. Ich würde das schreiben etwas wie dieses:
Mir die Beschreibung deutlich, was wir erwarten. Dann kann ich leicht erkennen, aus der Prüfung, was die Eingaben und die erwartete Ausgabe. Auch dies nutzt der hash-matcher, die einen schönen diff der beiden hashes auf einen Fehler:
Wenn ich Frage, was der Schlüssel-Wert-Beziehung bedeutet. Sind diese einfach die Testfälle, die Sie versuchen, führen Sie durch? Wenn dem so ist, würde ich nur machen, jedes für sich ein einzigartiges tests. Wenn es etwas mehr, dann darf ich die Frage stellen, warum die transform-Methode ist nicht vorausgesetzt, die hash, um mit zu beginnen.
Als für mich, es scheint mehr lesbar.
Wie etwa:
Mehr ein wenig langatmig, aber vielleicht besser lesbar?
Für eine exakte Gleichheit:
wenn jemand kommt, der Suche nach einem besseren diff-für große verschachtelte hashes habe ich mit diesem:
ursprünglichen Kern: https://gist.github.com/fabriciofreitag/b7458725ffef08eaf5ea541c95385a92
Ausgabe Beispiel: