So... I wrote some code in a plain-ruby class that raised a RuntimeError somewhat like below:
class MyClass def initialize(opts = {}) # do stuff thing = opts[:thing] raise RuntimeError "must have a thing!" unless thing.present? && thing.is_a?(Thing) # more stuff end end
and when I ran my fresh new rspec spec over it -> which looks somewhat like:
it "should raise an error if we don't pass a thing" do lambda { my_class = MyClass.new(:thing => nil) }.should raise_exception(RuntimeError) end
I kept getting something weird:
expected RuntimeError, got #<NoMethodError: undefined method `RuntimeError' for #<MyClass:0xb5acbf9c>>
You may already have spotted the problem... ah, single-character bugs, doncha love em?
Here it is.
WRONG:
raise RuntimeError "must have a thing!" unless thing.present? && thing.is_a?(Thing)
RIGHT:
raise RuntimeError, "must have a thing!" unless thing.present? && thing.is_a?(Thing)
of course, you can also just go ahead and leave out the RuntimeError entirely:
raise "must have a thing!" unless thing.present? && thing.is_a?(Thing)
because it's the default anyways... which makes it nice and defaultish for you.
No comments:
Post a Comment