2012-03-22 7 views
6

Estoy tratando de probar algo muy simple con Rsec en mi aplicación Rails.Rieles usando Rspec para probar ---> ActionView :: MissingTemplate:

Esta es la pieza de prueba de código en spec/controladores/movies_controller_spec.rb

describe MoviesController do 
    describe 'update' do               
     it 'should call the model method to look up the movie to update' do           
     Movie.should_receive(:find).with("3")   
     put :update, {:id => "3"}            
    end 
    end 

Este es el método controlador de los controladores/movies_controller.rb:

def update 
    Movie.find(params[:id]) 
end 

Y consigo este problema :

1) MoviesController update should call the model method to look up the movie to update Failure/Error: post :update, {:id => "3"} ActionView::MissingTemplate: Missing template movies/update, application/update with {:handlers=>[:erb, :builder, :coffee, :haml], :formats=>[:html], :locale=>[:en, :en]}. Searched in: * "#<RSpec::Rails::ViewRendering::EmptyTemplatePathSetDecorator:0xa65b300>" # ./spec/controllers/movies_controller_spec.rb:8:in `block (3 levels) in <top (required)>' 

Mis rutas se parecen:

movies GET /movies(.:format)   {:action=>"index", :controller=>"movies"} 
      POST /movies(.:format)   {:action=>"create", :controller=>"movies"} 
new_movie GET /movies/new(.:format)  {:action=>"new", :controller=>"movies"} 
edit_movie GET /movies/:id/edit(.:format) {:action=>"edit", :controller=>"movies"} 
    movie GET /movies/:id(.:format)  {:action=>"show", :controller=>"movies"} 
      PUT /movies/:id(.:format)  {:action=>"update", :controller=>"movies"} 
      DELETE /movies/:id(.:format)  {:action=>"destroy", :controller=>"movies"} 

¿Alguien podría por favor ayudarme y decirme qué demonios estoy haciendo mal en un ejemplo tan simple?

+0

Trate de poner en un movie_path redirect_to al final de la actualización por lo que no trata de buscar películas/actualizar – Bijan

+0

Tienes un problema similar en uno proyecto, la peor parte es que no aparece cuando se llama a rspec en un solo archivo de especificaciones. –

Respuesta

9

De acuerdo con the doc, la plantilla debe existir cuando pruebe su controlador desde views are stubbed by default.

Por lo tanto, su controlador puede estar limpio, pero el archivo de representación debe existir (incluso si no se compila).

-1

Como no tiene una redirección en su acción de actualización, Rails usará la convención predeterminada para qué vista mostrar, por lo que intentará y usará 'app/views/movies/update.html.erb' para renderiza la vista que probablemente no tengas. Por lo general, después de una actualización que desea redirigir a una vista de tipo de espectáculo. Checa lo que una acción de actualización típica se parece aquí:

http://guides.rubyonrails.org/getting_started.html#editing-posts

Cuestiones relacionadas