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