当我测试我的控制器,我做了一件这样的失败:RSpec的比较空的ActiveRecord ::关系
bar = SuperDuper.calculate(resource)
expect(assigns(:foo)).to eq(bar)
我得到这个结果
expected: #<ActiveRecord::Relation []>
got: #<ActiveRecord::Relation []>
(compared using ==)
为什么RSpec的认为这是失败?
正如你所看到的,我使用eq
忽略了对象标识,而不是equal
,它比较了对象标识。
也许rspec通过链接断言对象是相等的。所以你有两个相同的对象,但它们指向内存中的不同区域。考虑比较价值而不仅仅是对象比较 – tmn4jq
@ tmn4jq在这里我使用'eq'来比较值,而不是使用'equal'来比较对象标识 –
调试与'expect(assigns(:foo).to_a).to eq bar.to_a)'或'expect(赋值(:foo).to_sql).to eq(bar.to_sql)'。 –