Logo: Relish

  1. Sign in

Project: RSpec Mocks 3.2

`unstub`

  • @allow-old-syntax

unstub removes a method stub, essentially cleaning up the method
stub early, rather than waiting for the cleanup that runs at the end
of the example. The newer non-monkey-patching syntax does not have a direct
equivalent but in most situations you can achieve the same behavior using
and_call_original. The difference is that obj.unstub(:foo) completely cleans up the foo
method stub, whereas allow(obj).to receive(:foo).and_call_original continues to
observe calls to the method (important when you are using spies), which could affect the
method's behavior if it does anything with caller as it will include additional rspec stack
frames.

Background
Given
a file named "spec/spec_helper.rb" with:
RSpec.configure do |config|
  config.mock_with :rspec do |mocks|
    mocks.syntax = :should
  end
end
And
a file named ".rspec" with:
--require spec_helper
Scenarios
Unstub a method
Given
a file named "spec/unstub_spec.rb" with:
RSpec.describe "Unstubbing a method" do
  it "restores the original behavior" do
    string = "hello world"
    string.stub(:reverse) { "hello dlrow" }

    expect {
      string.unstub(:reverse)
    }.to change { string.reverse }.from("hello dlrow").to("dlrow olleh")
  end
end
When
I run rspec spec/unstub_spec.rb
Then
the examples should all pass

Last published almost 5 years ago by myronmarston.