On Mon, Aug 22, 2011 at 9:09 PM, ct9a <[email protected]> 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
> [email protected]
> http://rubyforge.org/mailman/listinfo/rspec-users
>
_______________________________________________
rspec-users mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/rspec-users