1

RoR コントローラー:

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 

test is red =( 何が問題なの?

4

2 に答える 2

2

コードはデータベース内のすべての子を更新します。ただし、テストインスタンスではありません:)これを試してください:

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
于 2012-05-30T13:34:54.240 に答える
0

試す

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

それでも機能しない場合は、rspec の出力を表示します。

于 2012-05-30T13:32:32.327 に答える