I’m attempting to stub the behavior of a method within a method:
class A
def method_one(an_argument)
begin
external_obj = ExternalThing.new
result = external_obj.ext_method(an_argument)
rescue Exception => e
logger.info(e.message)
end
end
end
Spec:
it "should raise an Exception when passed a bad argument" do
a = A.new
external_mock = mock('external_obj')
external_mock.stub(:ext_method).and_raise(Exception)
expect { a.method_one("bad") }.to raise_exception
end
However, an Exception never gets raised.
I’ve also tried:
it "should raise an Exception when passed a bad argument" do
a = A.new
a.stub(:ext_method).and_raise(Exception)
expect { a.method_one("bad") }.to raise_exception
end
and that doesn’t work either. How can one properly stub the external method to force an Exception in this case?
Thanks in advance for any ideas!
You have to stub the class method
newofExternalThingand make it return the mock:Note that this solution is deprecated in rspec 3. For solution not deprecated in rspec 3 see rspec 3 – stub a class method.