Rspec, проверка контроллера обновлений не работает?

Это домашнее задание, над которым я работаю, чтобы ознакомиться с TDD и Rspec. Но как-то Я не понимаю, почему следующий тест не прошел:

 describe 'update' do
    fixtures :movies
    before :each do
      @fake_movie = movies(:star_wars_movie)
    end
    it 'should retrieve the right movie from Movie model to update' do
      Movie.should_receive(:find).with(@fake_movie.id.to_s).and_return(@fake_movie)
      put :update, :id => @fake_movie.id, :movie => {:rating => @fake_movie.rating}
    end

    it 'should prepare the movie object available for update' do
      put :update, :id => @fake_movie.id, :movie => {:rating => @fake_movie.rating}
      assigns(:movie).should == @fake_movie
    end

    it 'should pass movie object the new attribute value to updated' do
      fake_new_rating = 'PG-15'
       @fake_movie.stub(:update_attributes!).with("rating" => fake_new_rating).and_return(:true)
      put :update, :id => @fake_movie.id, :movie => {:rating => fake_new_rating}
      @fake_movie.should_receive(:update_attributes!).with("rating" => fake_new_rating).and_return(:true)
    end
  end

Сообщение об ошибке, которое я получил:

Failures:

  1) MoviesController update should pass movie object the new attribute value to updated
     Failure/Error: @fake_movie.should_receive(:update_attributes!).with("rating" => fake_new_rating).and_return(:true)
       (#<Movie:0xd39ea38>).update_attributes!({"rating"=>"PG-15"})
           expected: 1 time
           received: 0 times
     # ./spec/controllers/movies_controller_spec.rb:99:in `block (3 levels) in <top (required)>'

Finished in 0.60219 seconds
12 examples, 1 failure

Failed examples:

rspec ./spec/controllers/movies_controller_spec.rb:95 # MoviesController update should pass movie object the new attribute value to updated

По сути, оно говорит, что моя последняя строка теста не удалась @fake_movie.should_receive(:update_attributes!).with(" rating" => fake_new_rating).and_return(:true), и я думаю, что он вообще не получил вызов функции update_attributes!`, но почему?

И код контроллера:

 def update
    @movie = Movie.find params[:id]
    @movie.update_attributes!(params[:movie])
    flash[:notice] = "#{@movie.title} was successfully updated."
    redirect_to movie_path(@movie)
  end

Заранее спасибо

5
задан Paul L 1 April 2012 в 18:44
поделиться