On Tue, Aug 23, 2011 at 6:11 AM, Gordon Yeong <anexi...@gmail.com> wrote:
> >> Do you have a before filter somewhere that is preventing the >> :update_attributes message from being received? >> >> I have checked my application's controllers > (app/controllers/application_controller.rb and > app/controllers/parts_controller.rb) and controller spec > (spec/controllers/parts_controller_spec.rb) and found no before filter that > is preventing the :update_attributes message from being received by Parts. > > Below is what my spec/controllers/parts_controller_spec.rb looks like: > > ------- Source code, spec/controllers/parts_controller_spec.rb starts > ----------------------- > > require 'spec_helper' > > describe PartsController do > let(:part){ > mock_model('Part').as_null_object > } > > before do > Part.stub(:new).and_return(part) > end > > it "creates a new part" do > Part.should_receive(:new). > with('title' => 'HKS boost controller'). > and_return(part) > post :create, :part => { 'title' => 'HKS boost controller' } > end > > context "saves the new part object successfully" do > it "sets the flash with a success message" do > post :create > flash[:notice].should eq('Part was successfully created.') > end > > it "redirects the user back to the Parts index page" do > post :create > response.should redirect_to( :action => 'index' ) > end > end > > context "the new part object fails to save" do > before do > # sabotage and make the save fail > part.stub(:save).and_return(false) > # call the create method which will have save in its process > post :create > end > > it "assigns @part with the data from db (or a blank one if it's the > first time" do > assigns[:part].should eq(part) > end > > it "renders the 'new' template again" do > # test that the template, 'new' is rendered. Of course, for > this > # work, the part's attribute variable values must be passed to > the > # view for rails to successfully render the template > response.should render_template('new') > end > end > > context 'saves updates to an existing part object successfully' do > it 'does its job in saving the update' do > Part.should_receive(:find).with(1).and_return(part) > Part.should_receive(:update_attributes).with('title' => 'Brake > pads').and_return(part) > Oh duh. You're calling `should_receive(:update_attributes)` on `Part` when it should be called on `part`: part.should_receive(:update_attributes).with('title' => 'Brake pads').and_return(true) > put :update, :id => 1, :part => {'title' => 'Brake pads'} > flash[:notice].should eq('Part was successfully updated.') > end > end > > end > > ------- Source code, spec/controllers/parts_controller_spec.rb ends > ----------------------- > > Do you have any good tutorials which illustrate the update message which I > could refer to? > I've been digging but can't find anything helpful :( > > thanks for your help :) > > > > _______________________________________________ > 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