 <p>It depends on the intent of <code>returns_the_hash</code></p> <p>If it changes and all of a sudden returns</p> <pre><code>{ :lorem =&gt; "ipsum", :foo =&gt; "bar", :baz =&gt; "qux", :options =&gt; { :oof =&gt; "rab", :zab =&gt; "xuq", }, } </code></pre> <p>Is that a bug that it returned lorem/ipsum or is it ok? </p> <p>If that indicates a bug, then your <strong>explicit</strong> and <strong>implicit</strong> tests wouldn't catch it, while the <strong>exact</strong> test would catch it. </p> <p>If that situation is not a bug, then you have more flexibility in deciding how important those other elements are to you and whether it makes sense for the tests to require less maintenance. </p> <p>It depends on how the data is used. For example, if all the data in the hash eventually shows up to the user, then your tests should be more stringent on what data is actually being returned (the <strong>exact</strong> test.)</p>