1
before_save 호출을 사용하여 특정 마스터에 속한 모든 레코드를 업데이트하고 있습니다. 두 항목 모두 item_id라는 필드가 있습니다.RSpec 및 팩토리 걸로 before_save 테스트하기
class Master < ActiveRecord::Base
has_many :records
before_save :update_records
def update_records
self.records.find_each do |r|
r.item_id = self.item_id
r.save
end
end
end
class Record < ActiveRecord::Base
end
의도 한대로 작동합니다 (이와 같은 작업을 수행하는 것이 좋습니다). 그러나 통과 RSpec 테스트를 얻을 수 없습니다. 이것이 제가 시도한 것입니다 :
describe Master do
describe 'before_save' do
it 'updates records belonging to it' do
master = FactoryGirl.create(:master, item_id: 1)
record = FactoryGirl.create(:record, master_id: master.id, item_id: 1)
master.item_id = 2
master.save
record.item_id.should == 2
end
end
end
그 이유는 흥미 롭습니다. 이 모델은 성공적으로 저장됩니다 레코드 모델의 두 번째 인스턴스에 대한 작업을 수행하지만 사양에 반환되지 않습니다 :
"MASTER - CREATED IN SPEC"
#<Master:0x007fd0ed55ec20> {
:id => 26,
:item_id => 1,
}
"RECORD - CREATED IN SPEC"
#<Record:0x007fd0ea157e40> {
:id => 16,
:item_id => 1,
:master_id => 26,
}
"RECORD - AFTER SAVE IN MODEL"
#<Record:0x007fd0ed2f9a70> {
:id => 16,
:item_id => 2,
:master_id => 26,
}
"MASTER - UPDATED IN SPEC"
#<Master:0x007fd0ed55ec20> {
:id => 26,
:item_id => 2,
}
"RECORD - FINAL IN SPEC"
#<Record:0x007fd0ea157e40> {
:id => 16,
:item_id => 1,
:master_id => 26,
}
당신은 알고 계십니까 :
- 왜 이런 일이?
- 어떻게이 스펙을 통과시킬 수 있습니까?
그게 전부 야! 그래서 당신이 어떻게 알았을 때 간단 ;-) 많은 감사드립니다. –