ruby 混淆RSpec散列匹配差异

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

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

it 'matches' do
  actual = {
    a: 'test test',
    b: 1,
    c: 2,
  }

  expect(actual).to match(
    a: a_string_starting_with('test'),
    b: 0,
    c: 2,
  )
end

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

mrphzbgm

mrphzbgm1#

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

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

kuarbcqp

kuarbcqp2#

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


# spec/supports/hash_diff_patcher.rb

module HashDiffPatcher
  def diff_as_object(actual, expected)
    if kind_of_hash?(actual) && kind_of_hash?(expected)
      super(actual.sort.to_h, expected.sort.to_h)
    else
      super
    end
  end

  private

  def kind_of_hash?(obj)
    # compact grape entity
    obj.instance_of?(Hash) || obj.instance_of?(Grape::Entity::Exposure::NestingExposure::OutputBuilder)
  end
end

RSpec::Support::Differ.prepend HashDiffPatcher

相关问题