2011-12-09 10 views
6

Aquí está el código rspec para el regulador:rápida [: aviso] .should_not be_nil falló en rspec

it "should render edit if update was not saved" do 
    item = Factory(:lease_item) 
    session[:corp_head] = true 
    post 'update', {:id => item.id, :name => 'nil'} 
    flash[:notice].should_not be_nil 
    response.should render 'edit'  
end 

La actualización de controlador es:

def update 
    if (eng? && dept_head?) || corp_head? || ceo? 
     @lease_item = LeaseItem.find(params[:id]) 
     @lease_item.input_by_id = session[:user_id] 
     if @lease_item.update_attributes(params[:lease_item], :as => :roles_update) 

     #redirect 
     redirect_to URI.escape("/view_handler?index=0&msg=Lease item updated successfully") 
     else 
     #back to new 
     render 'edit', :notice => "Item NOT updated" 
     end 
    else 
     #back to previous page 
     redirect_to URI.escape("/view_handler?index=0&msg=NO right to update lease item") 
    end  
    end 

Aquí es el código de error de rspec:

1) LeaseItemsController GET 'update' should render edit if update was not saved 
    Failure/Error: flash[:notice].should_not be_nil 
     expected: not nil 
      got: nil 

"Artículo NO actualizado" se esperaba en flash. Sin embargo, ¿por qué no hay nada con flash [: notice]? O cómo rspec hay un mensaje con render 'edit',: notice => 'Item NOT updated'

Thanks.

ACTUALIZACIÓN:

Aquí está el cambio en el controlador:

 ........... 
     else 
     #back to new 
     flash[:notice] = "Item NOT updated" 
     render 'edit' 
     end 
     ......... 

Este es el código rspec cuales pasa:

it "should render edit if update was not saved" do 
     item = Factory(:lease_item) 
     session[:corp_head] = true 
     post 'update', {:id => item.id, :lease_item => {:name => 'nil'}} 
     flash.should_not be_nil 
     response.should render_template(:action=> "edit") 
    end 

no funcionó, si se utiliza el flash [: aviso ] .should_not be_nil (o .. flash.now [: notice] ...). El error es Got nil, que es el mismo que antes. También response.should render 'edit' (o ... render: action => 'edit') tampoco pasó. El error es NameError o NoMethodError. No estoy seguro por qué.

+0

Usted está enviando "Artículo no actualiza" en el 'notice' variables al parcial de 'editar', pero ¿está realmente configurando 'flash [: notice]'? – Karl

+0

Cómo configurar flash [: notice]? – user938363

+0

no hay render 'foo',: notice => "blah" ... lea los documentos. Utilice flash [: notice] = "Artículo NO actualizado" luego renderice 'edit' – daniel

Respuesta

5

cambio de su persona para:

else 
    #back to new 
    flash[:notice] = "Item NOT updated" 
    render 'edit' 
end 
+0

rspec aún devuelve error: Error/error: flash [: notice] .should_not be_nil esperado: nil nil got: nil – user938363

+0

¿De verdad? do response. debería renderizar 'edit' y luego hacer flash [: notice] .should_not be_nil. – daniel

+0

El error puede deberse a que la vista 'editar' aún no se ha implementado ... – user938363

0

En primer lugar, no puedo ver exactamente dónde configura el flash en su código.

Lo que sea, sustituir:

post 'update', {:id => item.id, :name => 'nil'} 

con:

post 'update', {:id => item.id, :lease_item => { :name => 'nil' } } 
+0

: el aviso se incluye en el comando de renderizado. Termina en flash, ¿no? – user938363

+0

No hay ningún error con ambos comandos de publicación. ¿Hay una diferencia real entre esas dos publicaciones? – user938363

+0

: aviso no está en el comando de representación. Render tampoco es un comando ... mira https://github.com/rails/rails/blob/d5fd83f4c7f01cc1761783408267cce4d5da1946/actionpack/lib/action_view/render/rendering.rb#L16 – daniel