如何用RSpec的match_array匹配仅校验部分字段的哈希数组?
RSpec 校验哈希数组链接前缀的可行方案
你可以直接用RSpec内置的嵌套匹配器实现需求,不需要自定义匹配器,写法和你期望的语法非常接近:
expect(array_example).to match_array( [ { id: 1, link: start_with("www.some-link.com") }, { id: 2, link: start_with("www.example-link.com") } ] )
补充说明
- 上述写法的核心是用RSpec内置的
start_with字符串匹配器替代固定字符串,RSpec会自动校验对应link字段是否以指定域名开头。如果需要校验link包含域名(不限制在前缀位置),把start_with替换成include即可。 - 如果你测试的哈希可能存在其他额外字段,想要避免额外字段导致匹配失败,可以用兼容性更好的
a_hash_including写法:
expect(array_example).to match_array( [ a_hash_including(id: 1, link: start_with("www.some-link.com")), a_hash_including(id: 2, link: start_with("www.example-link.com")) ] )
- 如果数组的顺序是固定的,不需要无序匹配,把
match_array替换为eq即可。
内容的提问来源于stack exchange,提问作者PatKrol
相关产品推荐
相关产品推荐

