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

Reply via email to