比较哈希数组与红宝石中的正则表达式

时间:2019-07-21 19:33:49

标签: arrays ruby hash rspec

我有两个哈希表。实际数组是我正在通过测试的数组,我期望数组可以存储在文件中与实际数组进行比较的地方。

  • 实际数组

    [ {:var1=>nil, :action=>"open", :Run=>"App", :Id=>"A123-B456-C789"}, {:var1=>nil, :Id=>"P987-Q654-R321"} ]

  • 预期数组

    [ {:var1=>nil, :action=>"open", :Run=>"App", :Id=>"A123-B456-C789"}, {:var1=>nil, :Id=>"P987-Q654-R321"} ]

当前,我正在使用Rspec :: Matcher match_array进行比较,并且运行良好:

expect(actual).to match_array(expected)

问题

每个哈希中实际数组中的

Id 是动态的。因此,我无法将其与期望值进行比较。在这里,我想比较一下是否为nil或使用某些正则表达式检查模式。像这样:

{:var1=>nil, :Id=> !nil or /some-regex/}

不确定Rspec Matcher是否可行,还是我需要更改Matcher库?

谢谢!

1 个答案:

答案 0 :(得分:0)

使用双引号:

let(:id_double) { double('id') }
let(:expected) do
  [
    { var1: nil, action: 'open', Run: 'App', Id: id_double },
    { var1: nil, Id: id_double }
  ]
end

before do
  allow(id_double).to receive(:==) do |other_id|
    other_id =~ /^[A-Z]\d{3}-[A-Z]\d{3}-[A-Z]\d{3}$/
  end
end

it 'works' do
  actual = # ...
  expect(actual).to match_array(expected)
end