[rspec-users] should raise_error(ArgumentError) resulting in NoMethodError
Brian Ploetz
bploetz at gmail.com
Thu Aug 26 09:19:35 EDT 2010
*smacks head* Duh.
Thanks David and Rob!
On Aug 26, 12:35 am, Rob Biedenharn <R... at AgileConsultingLLC.com>
wrote:
> On Aug 26, 2010, at 12:14 AM, David Chelimsky wrote:
>
>
>
> > 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
>
> You might see this form, too.
>
> def currency_to_dollars(currency_amount)
> raise ArgumentError, "Currency amount can't be nil" if
> currency_amount.nil?
> end
>
> Note the comma that separates the arguments to raise (Kernel#raise).
>
> -Rob
>
>
>
>
>
> >> 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
> > rspec-us... at rubyforge.org
> >http://rubyforge.org/mailman/listinfo/rspec-users
>
> Rob Biedenharn
> R... at AgileConsultingLLC.com http://AgileConsultingLLC.com/
> r... at GaslightSoftware.com http://GaslightSoftware.com/
>
> _______________________________________________
> rspec-users mailing list
> rspec-us... at rubyforge.orghttp://rubyforge.org/mailman/listinfo/rspec-users
More information about the rspec-users
mailing list