我正在尝试匹配包含哈希数组的Rspec参数。
expect(myObj).to receive(:new).with(
anything,
anything,
anything,
anything,
hash_including(
hash_obj: filters[:hash_obj]
)
现在这个hash_obj: filters[:hash_obj]
具有相同的内容,但是不同的对象。我如何匹配内容?
hash_obj
是一个哈希数组,类似于
[
{
a: 1,
b: 2
},
{
a: 3,
b: 4
}
]
当涉及到内置属性匹配器(或者,更准确地说,是任何适当设计的匹配器,检查"相等"&;正确地),你可以简单地嵌套到你需要的深度,所以史密斯。如... hash_including(hash_obj: include(hash_including(a: 3)))
等应该可以工作。
例如,下面的期望是绿色
specify do
h = [
1,
"2",
{
3 => [
{a: 1},
{b: 2},
{c: 3}
]
}
]
expect(h).to include(
hash_including(
3 => include(
hash_including(a: 1)
)
)
)
end
因此,您可以遵循相同的方法,只需将其调整为您真正想要匹配的内容。
有一个严重的权衡需要注意:这种方法在深度不匹配时会导致相当模糊的错误报告。在这种情况下,特别是当您在几个地方有相同的期望时,使用自定义匹配器可能更有意义。