2012-05-22 1 views
0

у меня есть, что RSpec тестИзменение согласовани в Rspec 1.3 не признает равные объекты

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 (Сво рельсы 2.3 приложение, я не могу обновить rspec2)

ответ

2

RSpec не имеет никаких проблем с объектами, которые являются равными. Проблема здесь в том, что в ActiveRecord две несохраненные модели не считаются равными, даже если они имеют все те же свойства. Вы можете увидеть это, если вы запустите puts (Residue.new == Residue.new).

Вам нужно будет сохранить объект Residue для этого.

+0

Но let (: остаток) {Residue.new} должен помнить остаток, поэтому он должен быть всегда одного и того же экземпляра. r = Residue.new; puts (r == r); # => true –

+0

OK - Я вижу, что здесь происходит - матчи 'change' специально разработаны для чисел. В примере не выполняется строка https://github.com/dchelimsky/rspec/blob/master/lib/spec/matchers/change.rb#L21, даже если вы не получили очень хорошее сообщение об ошибке. –

+0

Я бы рекомендовал просто ожидать 'document.producer_residue.should == остаток'. –

 Смежные вопросы

  • Нет связанных вопросов^_^