2012-05-30 3 views
1

의 RoR 컨트롤러와 실패 :예기치 않은 테스트 RSpec에와 공장

def destroy 
    Page.find(params[:id]).destroy 
    @pagechildren = Page.where("parent_id = ?", params[:id]) 
    @pagechildren.update_all({parent_id: -1}) if @pagechildren.count > 
0 
    flash[:success] = 
t('activerecord.errors.controllers.message.attributes.page.page_destroy_suc cess') 
    redirect_to pages_path 
    end 

테스트 RSpec에

 it "should remove parent_id from children" do 
     @page2 = Factory(:page) 
     @pagechild = Factory(:page) 
     @pagechild[:parent_id] = @page2.id 
     lambda do 
      delete :destroy, :id => @page2 
     end.should 
change(@pagechild, :parent_id).from(@page2.id).to(-1) 
     end 

코드가 제대로() 작동하지만

Код все корректно обрабатывает (캐치 'ID' 페이지를 삭제하고 모두 자식 parent_id가 -1로 변경됨). 그러나 rspec 테스트는 실패합니다.

공장 :

Factory.define :page do |page| 
    page.name "Name example page" 
    page.title "Title example page" 
    page.content "Content example page" 
    page.metadescription "metadescription example page" 
    page.metakeywords "metakeywords example page" 
    page.head "head example page" 
    page.ismenu true 
    page.order_id -1 
    page.parent_id -1 
end 

테스트 = 빨간색 ( 뭐가 잘못

+0

RSpec에 테스트는 말한다 : PARENT_ID -1 – Danko

+0

에 의해 변경되지 않습니다 실패한 주장하고 테스트되는 코드 무엇을 좁힐하시기 바랍니다. –

+0

컨트롤러 액션에 대한 코드가 너무 많으면 모델로 이동하려고 시도합니다. 예를 들어'Page.find (params [: id]). destroy_unsetting_children'. BTW, 외래 키가'NULL' 대신에'-1'로 설정되어야하는 데이터베이스는 무엇입니까? – tokland

답변

2

. 코드가 db의 모든 자식을 업데이트하지만 테스트 인스턴스는 업데이트하지 않습니다. 이 시도 :

it "should remove parent_id from children" do 
     @page2 = Factory.create(:page) 
     @pagechild = Factory.create(:page) 
     @pagechild[:parent_id] = @page2.id 
     delete :destroy, :id => @page2 
     @pagechild.reload.parent_id.should == -1 
end 
+0

고마워요! 멋지다, 그것의 작품 – Danko

+0

다행, 대답 pls 받아 :) –

0

delete :destroy, :id => @page2.id 

을 시도하고 여전히 작동하지 않는 경우 RSpec에 출력을 보여줍니다

관련 문제