Имам този 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
И така... WTF?
Промяната на остатък за себе си прави ли твърдението неуспешно? Проверих дали са еднакви остатъци с ==, ===, eq? и винаги е вярно. Не мога да разбера какво не е наред с това.
Използвам rspec 1.3 (това е приложение за rails 2.3, не мога да надстроя до rspec2)