[rspec-users] should raise_error(ArgumentError) resulting in NoMethodError

Rob Biedenharn Rob at AgileConsultingLLC.com
Thu Aug 26 00:35:13 EDT 2010


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-users at rubyforge.org
> http://rubyforge.org/mailman/listinfo/rspec-users

Rob Biedenharn		
Rob at AgileConsultingLLC.com	http://AgileConsultingLLC.com/
rab at GaslightSoftware.com		http://GaslightSoftware.com/



More information about the rspec-users mailing list