【问题标题】:Comparing array of hashes with regex in ruby将哈希数组与 ruby​​ 中的正则表达式进行比较
【发布时间】:2019-11-29 20:35:16
【问题描述】:

我有两个哈希数组。实际数组是我正在通过测试的一个数组,我期望数组存储在文件中的某个位置,我将与实际数组进行比较。

  • 实际数组

    [ {: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 在每个散列的实际数组中都是动态的。因此,我无法将其与预期值进行比较。在这里,我想比较它是否不为零或使用一些正则表达式检查模式。像这样的:

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

不确定 Rspec Matcher 是否可行,或者我需要更改匹配器库?

提前致谢!

【问题讨论】:

    标签: arrays ruby hash rspec


    【解决方案1】:

    使用双精度:

    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
    

    【讨论】:

      猜你喜欢
      • 2015-01-11
      • 2019-03-03
      • 2021-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-03
      • 2012-03-24
      相关资源
      最近更新 更多