On Aug 8, 2010, at 2:53 PM, christofferklang wrote:
> Hello,
> I'm new to rails and I'm trying to wrap my heads around how to spec
> controllers using RSpec (using rails 3rc1 and rspec 2.0.0.beta.19).
>
> The problem I've run into is when I want to test that my controllers respond
> with a 404 for unfound records. Whenever I run the spec, the
> ActiveRecord::RecordNotFound exception is not caught by rails, causing the
> spec example to fail since the exception propagates out of the controller
> into the spec.
>
> >From googling around I get that rails only handles the exceptions and does a
> >404 response when it's run in production mode, and that you need to call
> >rescue_action_in_public! in your example if you want this behavior for test
> >mode. However, this does not seem to do anything for me. The example still
> >fails because the exception bubbles escapes unhandled from the controller.
>
> Do I need to set something up for the rescue_action_in_public! to work? Or is
> this not the correct way to test missing records?
>
> My full example: (using factory_girl, rspec mocks and devise)
>
>
> it "respons with 404 when trying to edit non-existing reads" do
> rescue_action_in_public!
> sign_in(@user)
> Read.should_receive(:find_by_id_and_user_id!).with(2,
> @user.id).and_raise(ActiveRecord::RecordNotFound)
>
> get :edit, :id => 2
> response.status.should eql 404
> end
>
>
> and the exception:
> 1) ReadsController resources respons with 404 for non existing reads for GET
> /reads/2/edit
> Failure/Error: get :edit, :id => 2
> ActiveRecord::RecordNotFound
It's up to you to handle the error in the controller. Something like this in
ApplicationController:
rescue_from ActiveRecord::RecordNotFound do
render '/404.html', :layout => false, :status => :not_found
end
HTH,
David
> Thanks, /Christoffer
_______________________________________________
rspec-users mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/rspec-users