You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在RSpec中匹配内容相同但对象不同的含哈希数组的哈希参数?

解决RSpec中哈希数组内容匹配的问题

你遇到的问题是虽然两个数组内容完全一致,但它们是不同的对象引用——不过其实Ruby里数组的==本来就是比较内容的,可能是你当前的写法没有触发RSpec去检查内容,而是直接做了对象身份的校验?没关系,我们可以用RSpec的数组匹配器来明确指定要匹配内容而非对象本身。

你只需要把hash_including里的filters[:hash_obj]替换成对应的数组匹配器就行,分两种情况:

1. 严格匹配顺序和内容

如果你需要数组里的哈希顺序完全一致,就用eq匹配器:

expect(myObj).to receive(:new).with(
  anything,
  anything,
  anything,
  anything,
  hash_including(
    hash_obj: eq(filters[:hash_obj])
  )
)

2. 只匹配内容,忽略顺序

如果数组里的哈希顺序不影响结果,用match_array会更灵活:

expect(myObj).to receive(:new).with(
  anything,
  anything,
  anything,
  anything,
  hash_including(
    hash_obj: match_array(filters[:hash_obj])
  )
)

原理说明

  • eq会递归检查数组及其内部哈希的内容是否完全一致,不管是不是同一个对象,只要内容对得上就会通过。
  • match_array(也可以用contain_exactly作为别名)会检查数组包含的所有元素是否都存在,不关心它们的排列顺序。

这样就能完美解决你因为对象不同导致的匹配失败问题啦。

内容的提问来源于stack exchange,提问作者kaur

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 23:47:36