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 

测试是红色的=(怎么了?

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 回答