Ask for Help
“My method stub only works on the first RSpec example and clearing in subsequent examples, what’s wrong?”
Using RSpec, it is common to mock out certain aspects of your code to change functionality for testing. This is accomplished using the “stub” method and passing the method name as a symbol.
SomeObject.stub(:some_method_to_modify).and_return do something_else() end
As we like to keep our code nice and DRY, we often pull things into “before” blocks. Unfortunately, this can cause some confusion as
describe "ObjectA" do before :all do ObjectB.stub!(:some_method_ObjectA_depends_on).and_return(15) end it "can test something" do ... end it "can test something else" do Objectb.some_method_ObjectA_depends_on end end
will have ObjectB.some_method_ObjectA_depends_on actually executing ObjectB’s method instead of stubbing. This is because after each example (”it” block), all stubs are cleared from all objects, leaving the stubs only effective in the first example.