【发布时间】:2016-08-23 20:07:35
【问题描述】:
我正在测试我的控制器,我做了这样的事情:
bar = SuperDuper.calculate(resource)
expect(assigns(:foo)).to eq(bar)
结果我得到了这个
expected: #<ActiveRecord::Relation []>
got: #<ActiveRecord::Relation []>
(compared using ==)
为什么 RSpec 认为这是失败的?
如您所见,我使用忽略对象身份的eq,而不是比较对象身份的equal。
【问题讨论】:
-
也许 rspec 通过链接断言对象的相等性。因此,您有 2 个相同的对象,但它们指向内存中的不同区域。考虑按值比较,而不仅仅是对象比较
-
@tmn4jq 这里我使用的是比较值的
eq,而不是比较对象身份的equal -
使用
expect(assigns(:foo).to_a).to eq(bar.to_a)或expect(assigns(:foo).to_sql).to eq(bar.to_sql)进行调试。