Stub! and stubs

I have an interesting setup: I am using rspec for mocking but I have
mocha installed which give me access to any_instance, expects, etc. The
problem that I am having is that I want to stub out a method for the
duration of a single example, throughout that example but only for that
example.

If I do,

Goal.any_instance.stub!(:valid?).and_return(true)

this is not sufficient because valid is called more than once

If I do,

Goal.any_instance.stubs(:valid?).returns(true) then my tests are not
independent but dependent on one another.

Can anyone help?

Thanks in advance,
Sam

On Oct 12, 2009, at 9:37 PM, Sam W. wrote:

Goal.any_instance.stub!(:valid?).and_return(true)

this is not sufficient because valid is called more than once

If I do,

Goal.any_instance.stubs(:valid?).returns(true) then my tests are not
independent but dependent on one another.

Can anyone help?

While mocha and rspec’s mocks might be compatible for you in some
cases, it is purely accidental. I’d strongly recommend you choose one
or the other. If any_instance is important to you, I’d choose mocha.
If not, choose whichever makes you happier.

Cheers,
David

On Oct 12, 2009, at 9:14 PM, David C. wrote:

If I do,
Can anyone help?

While mocha and rspec’s mocks might be compatible for you in some
cases, it is purely accidental. I’d strongly recommend you choose
one or the other. If any_instance is important to you, I’d choose
mocha. If not, choose whichever makes you happier.

Unless I’m incorrect, this is still a feature request on the
lighthouse tracker.

I don’t see why we couldn’t use something like this code:

to implement the mixin/mixout feature that we’d need to support
different frameworks per-example group.

Scott

On Oct 12, 2009, at 10:26 PM, Scott T. wrote:

duration of a single example, throughout that example but only for

Unless I’m incorrect, this is still a feature request on the
lighthouse tracker.

I don’t see why we couldn’t use something like this code:

GitHub - smtlaissezfaire/mix_master: A pure ruby solution for unmixing modules.

to implement the mixin/mixout feature that we’d need to support
different frameworks per-example group.

Hey Scott - I haven’t looked into mixmaster yet, but supporting
multiple mock frameworks is definitely something I want to do/support
in rspec-2. Just been busy trying to get the book done and on paper
before I focus on the next version of rspec.

I think this is a separate issue, however. Sam is looking to mix
frameworks in a single statement.

FWIW,
David

Things seem to be working better now that I am using just Mocha,
however, I am still having problems with
Foo.any_instance.stubs(:valid?).returns(false). I later tests, valid is
still stubbed out to be false. How to I stub something for exactly the
duration of one example?

Thanks,
Sam

Sam,

As the .any_instance call suggests, anything ever again for the duration
of
the test will stub that value, the alternative is this:

Foo.any_instance.stubs(:valid?).returns(false)

replace with this

foo = Foo.new
foo.stubs(:valid?).returns(false)

HTH

  • Lee

On Mon, Oct 12, 2009 at 6:26 PM, Scott T. [email protected]
wrote:

I don’t see why we couldn’t use something like this code:

GitHub - smtlaissezfaire/mix_master: A pure ruby solution for unmixing modules.

to implement the mixin/mixout feature that we’d need to support different
frameworks per-example group.

David and I began work in an experimental branch that would make
any_instance easy without any mixin magic (although admittedly it does
do const redefinition magic :wink: I should finish that up at some point.

Pat