On Aug 25, 2010, at 10:13 PM, Brian Ploetz wrote:
> Environment
> ------------------
> ruby 1.9.2p0 (2010-08-18 revision 29036) [x86_64-darwin10.4.0]
> rspec (1.3.0)
>
> Code
> -------
> def currency_to_dollars(currency_amount)
> raise ArgumentError("Currency amount can't be nil") if
> currency_amount.nil?
> end
>
> Spec
> --------
> it "should raise an ArgumentError if currency_amount is nil" do
> lambda { @service.currency_to_dollars(nil) }.should
> raise_error(ArgumentError)
> end
>
> Results in this failure:
> 1)
> 'Service should raise an ArgumentError if currency_amount is nil' FAILED
> expected ArgumentError, got #<NoMethodError: undefined method `ArgumentError'
> for #<Service:0x0000010087e5f0>>
This message is telling you there is no ArgumentError method, not that the
constant ArgumentError is missing. The method needs to be (adding ".new"):
def currency_to_dollars(currency_amount)
raise ArgumentError.new("Currency amount can't be nil") if
currency_amount.nil?
end
> test/spec/service_spec.rb:92:in `block (2 levels) in <top (required)>'
>
>
> Changing the test to either of these two variants allows the the to pass:
>
> lambda { @service.currency_to_dollars(nil) }.should
> raise_error(StandardError)
> lambda { @service.currency_to_dollars(nil) }.should raise_error
These pass because NoMethodError, which is what is being thrown, is a subclass
of StandardError and Exception.
HTH,
David
_______________________________________________
rspec-users mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/rspec-users