【发布时间】:2011-06-11 22:14:07
【问题描述】:
在Rails 3.0.3 上的Ruby 1.9.2 中,我正在尝试测试两个Friend(类继承自ActiveRecord::Base)对象之间的对象相等性。
对象相等,但测试失败:
Failure/Error: Friend.new(name: 'Bob').should eql(Friend.new(name: 'Bob'))
expected #<Friend id: nil, event_id: nil, name: 'Bob', created_at: nil, updated_at: nil>
got #<Friend id: nil, event_id: nil, name: 'Bob', created_at: nil, updated_at: nil>
(compared using eql?)
只是为了笑,我还测试了对象身份,正如我所料,它失败了:
Failure/Error: Friend.new(name: 'Bob').should equal(Friend.new(name: 'Bob'))
expected #<Friend:2190028040> => #<Friend id: nil, event_id: nil, name: 'Bob', created_at: nil, updated_at: nil>
got #<Friend:2190195380> => #<Friend id: nil, event_id: nil, name: 'Bob', created_at: nil, updated_at: nil>
Compared using equal?, which compares object identity,
but expected and actual are not the same object. Use
'actual.should == expected' if you don't care about
object identity in this example.
有人可以向我解释为什么第一个对象相等性测试失败,以及我如何才能成功地断言这两个对象相等吗?
【问题讨论】:
标签: ruby-on-rails ruby activerecord identity equality