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
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
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
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 ![]()
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