On Mon, Aug 22, 2011 at 9:09 PM, ct9a <anexi...@gmail.com> wrote: > > > Thanks, Justin. > > I have the part object mocked up before each spec runs. > > ------- Extract begins ----------------- > > let(:part){ > mock_model('Part').as_null_object > } > > before do > Part.stub(:new).and_return(part) > end > > ------- Extract ends ----------------- > > > With that in mind, I just made changes to my spec as below: > > ------- Extract begins ----------------- > > it 'saves updates to an existing part object successfully' do > Part.should_receive(:find).with(1).and_return(part) > Part.should_receive(:update).with( 'title' => > 'Grimspeed' ).and_return(part) >
Should be: Part.should_receive(:update_attributes).with('title' => 'Grimspeed').and_return(part) No where do you call `update` on Part. > put :update, :id => 1, :part => { 'title' => 'Grimspeed' } > end > > ------- Extract ends ----------------- > > > When I run the 'rake spec:controllers', I get the following error: > > > ------- Error extract begins ----------------- > > 1) PartsController saves updates to an existing part object > successfully > Failure/Error: Part.should_receive(:update).with( 'title' => > 'Brake pads' ).and_return(part) > (<Part(id: integer, title: string, description: text, > created_by: string, updated_by: string, created_at: datetime, > updated_at: datetime) (class)>).update({"title"=>"Brake pads"}) > expected: 1 time > received: 0 times > # ./spec/controllers/parts_controller_spec.rb:53 > > ------- Error extract ends ----------------- > > I then put in Justin's change with the use of double() as follows: > > ------- Source code extract begins ----------------- > > it 'saves updates to an existing part object successfully' do > part = double(part) > Part.should_receive(:find).with(1).and_return(part) > Part.should_receive(:update).with( 'title' => 'Brake > pads' ).and_return(part) > put :update, :id => 1, :part => { 'title' => 'Brake pads' } > end > > ------- Source code extract ends ----------------- > > and I got the following error: > > ------- Error extract begins ----------------- > > 1) PartsController saves updates to an existing part object > successfully > Failure/Error: put :update, :id => 1, :part => { 'title' => > 'Brake pads' } > Double received unexpected message :update_attributes with > ({"title"=>"Brake pads"}) > # ./app/controllers/parts_controller.rb:63:in `update' > # ./app/controllers/parts_controller.rb:62:in `update' > # ./spec/controllers/parts_controller_spec.rb:55 > > ------- Error extract ends ----------------- > > I have also looked at a few other posts in the group but can't figure > out what's causing > update_attributes not to be recognised :( > > - > http://groups.google.com/group/rspec/browse_thread/thread/9bfb4a348799c30f/30de6b7953222b5a?lnk=gst&q=update_attributes#30de6b7953222b5a > - > http://groups.google.com/group/rspec/browse_thread/thread/fe4985e2b8be16da/f590a9e0510ff4fb?lnk=gst&q=update_attributes#f590a9e0510ff4fb > > My update message in the parts controller reads as below: > > ------- Source code extract starts ----------------- > def update > @part = Part.find(params[:id]) > > respond_to do |format| > if @part.update_attributes(params[:part]) > format.html { redirect_to(@part, :notice => 'Part was > successfully updated.') } > format.xml { head :ok } > else > format.html { render :action => "edit" } > format.xml { render :xml => @part.errors, :status > => :unprocessable_entity } > end > end > end > > ------- Source code extract ends ----------------- > > > I have used this bit of code without problems in the past. > update_attributes, like save, is part of the ActiveRecord api (http:// > ar.rubyonrails.org/). > > Well, given that controllers are not to know of the implementation of > messages, > I have then stubbed the message to the update_attributes method in the > parts controller. > > ------- Source code extract starts ----------------- > context 'saves updates to an existing part object successfully' do > before do > part = > double('part').stub(:update_attributes).and_return(true) > end > > it 'does its job in saving the update' do > Part.should_receive(:find).with(1).and_return(part) > Part.should_receive(:update).with('title' => 'Brake > pads').and_return(part) > put :update, :id => 1, :part => {'title' => 'Brake pads'} > end > end > ------- Source code extract ends ----------------- > > Alas, I got the error below :( > > ------- Error extract starts ----------------- > > 1) PartsController saves updates to an existing part object > successfully does its job in saving the update > Failure/Error: Part.should_receive(:update).with('title' => > 'Brake pads').and_return(part) > (<Part(id: integer, title: string, description: text, > created_by: string, updated_by: string, created_at: datetime, > updated_at: datetime) (class)>).update({"title"=>"Brake pads"}) > expected: 1 time > received: 0 times > # ./spec/controllers/parts_controller_spec.rb:61 > > ------- Error extract ends ----------------- > _______________________________________________ > rspec-users mailing list > rspec-users@rubyforge.org > http://rubyforge.org/mailman/listinfo/rspec-users >
_______________________________________________ rspec-users mailing list rspec-users@rubyforge.org http://rubyforge.org/mailman/listinfo/rspec-users