RSpec:有没有办法在任何级别检查嵌套的哈希键?
我希望我的散列看起来像以下两种:RSpec:有没有办法在任何级别检查嵌套的哈希键?,rspec,Rspec,我希望我的散列看起来像以下两种: {metadata: {SOME_UNKNOWN_KEY: {transaction_id: 123456}}} {metadata: {transaction_id: 123456}} 如果我正在寻找键:transaction\u id,我知道我可以使用hash\u include来期望嵌套键应该位于特定位置,但我希望能够这样做以涵盖这两个选项: expect(something). to receive(some_method). with(has
{metadata: {SOME_UNKNOWN_KEY: {transaction_id: 123456}}}
{metadata: {transaction_id: 123456}}
如果我正在寻找键:transaction\u id
,我知道我可以使用hash\u include
来期望嵌套键应该位于特定位置,但我希望能够这样做以涵盖这两个选项:
expect(something).
to receive(some_method).
with(hash_including(metadata: hash_including_anywhere(:transaction_id)))
这可能吗?当然可能
查看hash\u包括是如何实现的,可以看出它是一个简单的matcher类:
hashinclude
matcher是基于BaseHashMatcher
的,如果您使用某种递归方法来检查密钥是否隐藏在更深的地方,您应该可以:
您可以从阅读hash\u的规范开始,包括
开始:
定义自己的matcher听起来很可怕,因为它们在我们的测试中就像魔术一样工作,但实际上编写起来并没有那么复杂 目前还没有机会将其付诸实践,但这看起来确实是正确的方向。谢谢