RSpec - 相等匹配,两个不同的实例

时间:2016-10-07 08:17:52

标签: ruby rspec

我创建了一个解析器,它从CSV文件读取并从每一行创建对象。它工作正常,但现在我创建了Rspec测试。我有:

 let(:sample_row) { Call.new(date: '01.09.2016 08:49', service: 'International', phone_number: '48627843111', raw_duration: '0:29', unit: '', cost: '0.00') }

it 'tests parser' do
    expect([sample_row]).to   eql(parse('/file_test.csv'))
end

测试输出 - expectedgot - 是相同的,除了实例ID - 它们是完全不同的,因为它们是两个不同的对象,即使它们具有完全相同的属性。所以我在我的类中放置了inspect方法来控制Object的呈现方式。现在RSpec向我展示了两个完全相同的expectedgot,但仍然测试失败。我怎么能以某种方式省略这样一个事实:如果涉及实例编号,两个实体并不完全相同?我还试图使用eq

1 个答案:

答案 0 :(得分:2)

所有给定的信息eq无法开箱即用。您有多种选择:

  • 比较expect(sample_row.service).to eq(parse('/file_test.csv').first.service)
  • 等每个属性
  • 实施Comparable
  • 使用像equalizer这样的第三方gem定义相等
  • Call添加一个方法,将所有属性转换为哈希并比较这些哈希
  • 创建自己的匹配器
  • ...