Rails использует Rspec для тестирования ---> ActionView :: MissingTemplate: - PullRequest
6 голосов
/ 23 марта 2012

Я пытаюсь протестировать что-то очень простое с помощью Rsec в моем приложении Rails.

Это тестовый фрагмент кода в spec / controllers / 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

Этометод контроллера в controllers / movies_controller.rb:

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

И я получаю эту проблему:

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)>'

Мои маршруты выглядят так:

    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"}

Может кто-нибудьПожалуйста, помогите мне и скажите мне, что, черт возьми, я делаю неправильно в таком простом примере?

Ответы [ 2 ]

9 голосов
/ 23 марта 2012

Согласно документу , шаблон должен существовать при тестировании вашего контроллера, поскольку views are stubbed by default.

Таким образом, ваш контроллер может быть чистым, но файл рендеринга должен существовать (даже еслине компилируется).

0 голосов
/ 23 марта 2012

Поскольку у вас нет перенаправления в вашем действии обновления, rails будет использовать соглашение по умолчанию для того, какое представление будет отображаться, поэтому он попытается использовать 'app / views / movies / update.html.erb' для отображения вид, которого вы, вероятно, не имеете. Обычно после обновления вы хотите перенаправить в представление типа шоу. Посмотрите, как выглядит типичное действие по обновлению:

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

...