未来的读者请注意:您认为 RSpec 不认为您的哈希值相等吗?其中一个可能是 OrderedHash,但从常规 RSpec 输出中您无法辨别。这就是引发这篇文章的问题。
原问题:
假设我有一个规范,我想测试一个方法是否生成适当的哈希值。
it 'should generate the Hash correctly' do
expected = {:foo => 1, 'baz' => 2}
subject.some_method_that_should_generate_the_hash.should == expected
end
这通常会失败,因为具有相同键值对的不同哈希可能会以不同的顺序返回它们的对。结果如下:
Failure/Error: subject.some_method_that_should_generate_the_hash.should == expected
expected: {:foo => 1, 'baz' => 2},
got: {'baz' => 2, :foo => 1}
对于数组,可以使用 =~ 运算符来解决。然而,这对于哈希值不起作用。目前,我已经采取了
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
但这似乎不必要地冗长。我希望对此有一个明显的解决方案。我是否忽略了文档中的某些内容,或者 RSpec 没有适当的匹配器来实现无序哈希相等?