Stub an instance method for every new instance of a class

Is there an easy way to stub an instance method for every new instance
of a
given class? I suppose I could just redefine the method, but I’m
wondering
if the RSpec mocking framework has this built in.

On 01/04/2008, Jed H. [email protected] wrote:

Is there an easy way to stub an instance method for every new instance of
a given class? I suppose I could just redefine the method, but I’m wondering
if the RSpec mocking framework has this built in.

Hi Jed

I hate it when other people ask this, but I can’t help :slight_smile: How come you
need
to do this? I’ve always wondered what the use case for this “mocking”
strategy is

Ashley

I think the general consensus is that if you need this feature, then
you have ugly code that needs cleaning up :slight_smile: If you’re in a situation
like me, where you’re too noob to figure out a better solution for
some legacy code that you inherited, go to this url and find the
instructions for installing Mocha:

http://wiki.rubyonrails.org/rails/pages/Testing+Plugins

With it you can do:
ModelName.any_instance.stubs(:the_method).returns(happy_times)

However, I strongly encourage you to stare at your current code for a
while and try to find a cleaner MVC-supportive solution. The general
rule of thumb is that if it’s difficult to write a spec for, then your
code is ugly :slight_smile: Hopefully in this case you can take this as an
opportunity to improve your code. If not, Mocha works fairly well!

Glenn

Haha, that’s about the response I was expecting; I asked with some
trepidation. I’m just looking for a quick hack to short-circuit Merb’s
render method to do some view/controller isolation testing until Merb
officially supports it. I can’t just stub methods on @controller (like
in
Rails) because the controller is instantiated after calling dispatch.
I suppose I could whip up a different sort of hack to accomplish the
isolation in the meantime, but now I’m not so sure; apparently I’m quite
a
noob :wink:

On Tue, Apr 1, 2008 at 1:50 AM, Ashley M.
[email protected]

On Tue, Apr 1, 2008 at 2:11 PM, Corey H. [email protected]
wrote:

Could you stub out Controller.new and return your mock?

Bingo.

Could you stub out Controller.new and return your mock?

I’m not sure how that would work. For controller specs, I want to keep
most
of the controller intact so that I can verify its actual behavior. Am I
missing something?

On Tue, Apr 1, 2008 at 12:12 PM, David C. [email protected]

Ahhh, clever. I see the light

Create an instance of the controller

contr = MyController.new

MyController.stub!(:new).and_return contr

contr.stub!(:method_i_want_to_stub).and_return ‘sweetness’

Something like this?

-Corey

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs