0
我有rspec的測試更改匹配不承認相等的對象
let(:document) { Document.new }
let(:residue) { Residue.new }
describe "inner_residue=" do
before do
document.producer_residue = residue
end
it 'dont changes the producer residue' do
expect { document.inner_residue = residue }.to_not change(document, :producer_residue)
end
end
輸出這樣的錯誤:
producer_residue should not have changed, but did change from #<Residue id: nil, un_code: nil, description: "res", created_at: ... > to #<Residue id: nil, un_code: nil, description: "res", created_at: ... >
正如你看到的,有相同的殘留物。 該方法的更復雜,但是這一次是失敗過一個簡單化:
def inner_residue=(other)
return self.producer_residue = self.addressee_residue = nil unless other
self.producer_residue = producer_residue
end
所以...跆拳道?
爲自己更改殘差會導致斷言失敗?我檢查了它們是否與==,===,eq相同?它永遠是真的。我無法理解這是什麼錯誤。
我使用RSpec的1.3(它的軌道2.3應用程序,我不能升級到rspec2)
但是 let(:residue){Residue.new} 應該記憶殘留物,所以它應該總是相同的實例。 r = Residue.new; puts(r == r); #=> true –
好的 - 我看到這裏發生了什麼 - 「變化」匹配器是專門爲數字設計的。該示例失敗了https://github.com/dchelimsky/rspec/blob/master/lib/spec/matchers/change.rb#L21,即使您沒有收到非常好的失敗消息。 –
我建議只是期望'document.producer_residue.should == residue'。 –