यह एक होमवर्क है जो मैं टीडीडी और रुपेक के साथ परिचित होने की दिशा में काम कर रहा हूं। लेकिन किसी भी तरह मुझे समझ नहीं नहीं क्यों निम्नलिखित परीक्षण विफल:रुपयेपीईसी, अद्यतन नियंत्रक के लिए परीक्षण काम नहीं कर रहा है?
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
अग्रिम धन्यवाद
एक अच्छी प्रैक्टिस के रूप में केवल वही है जो आपके पास है, आपके पास 'ढूंढ' या 'update_attributes' नहीं है, आपको उन्हें स्टब नहीं करना चाहिए – Calin