Problem with testing for an exception from a controller method

I have a User controller where users aren’t added with the usual
new/create
actions. I’m trying to set it so that it raises when ‘new’ is called
but it
doesn’t seem to be working - here’s the method, test and test result.
Can
anyone see why it’s not working?

#in controller
def new
raise “Users should be added with ‘batch_add’ rather than 'new”
end

#test
describe “/new” do
it “should raise an error when called” do
lambda{get(‘new’)}.should raise_error(RuntimeError)
end
end

#test report
‘Admin::UserController /new should raise an error when called’ FAILED
expected RuntimeError but nothing was raised

Won’t the exception get turned into a http return code from the get?

On Feb 18, 2008 8:30 AM, Corey H. [email protected] wrote:

Won’t the exception get turned into a http return code from the get?

It depends on a few things.

Max - what versions of rspec and rails are you using?

500? That’s internal server error. You could set up an expectation for
the
return, using a code you know isn’t right (200?), then see what the
actual
value is after you get the failing test.

ah yes of course :slight_smile:

So, now, “should_not be_success” passes ok, but should i be more
specific
and require a particular error code? If so, which would i get from a
get
call that’s failed because of a RuntimeError exception?

thanks!

On Feb 18, 2008 8:46 AM, Corey H. [email protected] wrote:

500? That’s internal server error. You could set up an expectation for the
return, using a code you know isn’t right (200?), then see what the actual
value is after you get the failing test.

What he said :slight_smile:

On Feb 18, 2008 8:43 AM, Max W. [email protected]
wrote:

ah yes of course :slight_smile:

So, now, “should_not be_success” passes ok, but should i be more specific
and require a particular error code? If so, which would i get from a get
call that’s failed because of a RuntimeError exception?

You should be able to discover that by specifying one (like 200) and
seeing what you get.

response.error_code.should == 200

Cheers,
David

RAILS_GEM_VERSION = ‘1.1.6’
rspec - Version 1.1.3

great minds :slight_smile:

thanks guys!