Take the 2-minute tour ×

Much like this question, I too am using Ryan Bates's nifty_scaffold. It has the desirable aspect of using Mocha's any_instance method to force an "invalid" state in model objects buried behind the controller.

Unlike the question I linked to, I'm not using RSpec, but Test::Unit. That means that the two RSpec-centric solutions there won't work for me.

Is there a general (ie: works with Test::Unit) way to remove the any_instance stubbing? I believe that it's causing a bug in my tests, and I'd like to verify that.

share|improve this question
add comment

2 Answers

up vote 11 down vote accepted

As it happens, Mocha 0.10.0 allows unstubbing on any_instance().

str = "Not Stubbed!"
puts str.to_s   # "Stubbed!"
puts str.to_s   # "Not Stubbed!"
share|improve this answer
add comment

Mocha does not provide such a functionality. However you can implement it yourself.

The first thing we should know about mocha is that mocha actually replaces the original methods when you stub them. So in order to be able to restore these methods later, you must keep a reference to the former ones. It can be easily achieved by: alias new_method old_method. It must be done before mocking the old_method.

Now, to unmock a method, you only need to alias old_method new_method.

Consider the following code:

class A
    def a

class TestA < Test::Unit::TestCase
    def test_undo_mock
        a = A.new
        A.class_eval {alias unmocked_a a}

        assert a.a, "b"

        A.class_eval {alias a unmocked_a}
        assert a.a, "a"
share|improve this answer
Excellent. This looks like something that could be added/monkeypatched into Mocha too. –  Craig Walker May 24 '10 at 16:05
I've never felt the need for this functionality, but there is a ticket - floehopper.lighthouseapp.com/projects/22289-mocha/tickets/… if you want to lobby for the change. It would be great if you have some examples of why you'd want to use it. –  James Mead Sep 26 '10 at 16:51
I have added unstubbing functionality - Mocha::ObjectMethods#unstub - see mocha.rubyforge.org/classes/Mocha/ObjectMethods.html#M000009 –  James Mead Dec 2 '10 at 11:08
Mocha now has this; see my new answer. –  Craig Walker Dec 21 '11 at 19:30
add comment

Your Answer


