我创建了一个解析器,它从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
测试输出 - expected
和got
- 是相同的,除了实例ID - 它们是完全不同的,因为它们是两个不同的对象,即使它们具有完全相同的属性。所以我在我的类中放置了inspect
方法来控制Object的呈现方式。现在RSpec向我展示了两个完全相同的expected
和got
,但仍然测试失败。我怎么能以某种方式省略这样一个事实:如果涉及实例编号,两个实体并不完全相同?我还试图使用eq
。
答案 0 :(得分:2)
所有给定的信息eq
无法开箱即用。您有多种选择:
expect(sample_row.service).to eq(parse('/file_test.csv').first.service)
Comparable
equalizer
这样的第三方gem定义相等Call
添加一个方法,将所有属性转换为哈希并比较这些哈希