On 27 Feb 2009, at 17:08, Marcus Roberts wrote:
>Unless RSpec is doing some magic under the hood that I'm not aware of,
>this is expected behavior - you're reassigning the constant value of
>MachineInstance.

>What you really want to do is mock/stub directly on MacineInstance. e.g.

>MachineInstance.should_receive(:create).and_return @mock_machine

If we did that, would that stub/mock carry over into other spec files run later by autospec, which is what we're seeing. I can see we're changing the definition of MachineInstance in the spec we do that in, but should that carry over to later specs?


That's the way Ruby behaves, yes.

Once you assign the constant MachineInstance to point to your mock, Rails' magic auto-file-loading which normally happens when Ruby fires a 'missing constant error' will never run, so your real class will never get loaded.

Assigning constants in your tests is a pretty bad idea unless you know exactly what you're doing.



Matt Wynne
http://blog.mattwynne.net
http://www.songkick.com

_______________________________________________
rspec-users mailing list
rspec-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/rspec-users

Reply via email to