ruby 混淆RSpec散列匹配差异

u3r8eeie  于 2022-11-04  发布在  Ruby
关注(0)|答案(2)|浏览(193)

我正在使用RSpec match matcher来检查一个哈希值是否包含期望值。当哈希值的一个键不匹配时,所有的动态值(a_string_starting_with等)都显示为不匹配。当你试图匹配一个更大的哈希值时,这会让你分心。我想知道是否有其他方法来检查哈希值,这样只有真正不匹配的值才会显示在diff中。
下面是一个示例,其中a被标记为红色,尽管其值是正确的。

  1. it 'matches' do
  2. actual = {
  3. a: 'test test',
  4. b: 1,
  5. c: 2,
  6. }
  7. expect(actual).to match(
  8. a: a_string_starting_with('test'),
  9. b: 0,
  10. c: 2,
  11. )
  12. end

我想知道是否有其他的匹配器我应该使用。或者是否有任何自定义匹配器或宝石?

mrphzbgm

mrphzbgm1#

此问题是RSpec当前使用的不同gem,他们已经意识到了此问题,尽管当前不存在修复程序,如以下票证所示:

目前在票证中提出的解决方案之一与Mosaaleb的建议类似。

kuarbcqp

kuarbcqp2#

我也遇到了同样的问题,这对我很有效:

  1. # spec/supports/hash_diff_patcher.rb
  2. module HashDiffPatcher
  3. def diff_as_object(actual, expected)
  4. if kind_of_hash?(actual) && kind_of_hash?(expected)
  5. super(actual.sort.to_h, expected.sort.to_h)
  6. else
  7. super
  8. end
  9. end
  10. private
  11. def kind_of_hash?(obj)
  12. # compact grape entity
  13. obj.instance_of?(Hash) || obj.instance_of?(Grape::Entity::Exposure::NestingExposure::OutputBuilder)
  14. end
  15. end
  16. RSpec::Support::Differ.prepend HashDiffPatcher
展开查看全部

相关问题