On Mon, Jul 13, 2009 at 1:04 PM, Scott Taylor<sc...@railsnewbie.com> wrote: > > On Jul 13, 2009, at 1:46 PM, Scott Taylor wrote: > > On Jul 13, 2009, at 1:32 PM, Adam Anderson wrote: > > Thanks for the reply, Scott. > > What you describe is what is currently being done. > > now = Time.now > Time.stub!(:now).and_return(foo_time) > do_stuff > Time.stub!(:now).and_return(now) > > However, this is not returning the actual time it is only returning the time > set on the first line. I need Time.now to return to its original behavior > (i.e., returning the current, actual time). > > Well, every time you create a stub, rspec aliased the method before it > destroys it: > http://gist.github.com/1ed96143092a02cb727b > It's ugly, but it will work. > > Here's another solution, without needing to resort to the library: > http://gist.github.com/e573cb79073805a632c9 > Of course, this solution only works if you don't have other stubs on Time.
It also only works as long as that method keeps its name :) That method is explicitly :nodoc:'d which indicates that it is an internal method and therefore subject to change. Not saying I plan to change it, just that of now it is not a public API. That said, this thread suggests that we need a public API for resetting partial stubs like this. I'm thinking something more intention revealing like tear_down_rspec_stubs or something like that. Thoughts? Recommendations? > Scott > > > You might also want to check out this library: > http://github.com/notahat/time_travel/tree/master > Scott > > > -Adam > > On Mon, Jul 13, 2009 at 9:58 AM, Scott Taylor <sc...@railsnewbie.com> wrote: >> >> On Jul 13, 2009, at 12:09 PM, Adam Anderson wrote: >> >>> I can't seem to find a good way to do this. If I stub out Time.now in one >>> of my specs but need to return it to its original functionality then can I >>> remove the stub? >>> >>> So I'd like to say something like: >>> Time.stub!(:now).and_return(foo_time) >>> Time.now # => foo_time >>> Time.unstub!(:now) >>> Time.now # => whatever time it actually is >> >> >> Capture it before you stub it: >> >> real_now= Time.now >> >> Time.stub!(:now).and_return a_later_time >> >> Time.stub!(:now).and_return real_now >> >>> >>> Is this possible? I noticed $rspec_mocks.reset_all, but obviously I don't >>> want everything to go away, just this one stub. >>> >>> >>> -Adam >>> _______________________________________________ >>> rspec-users mailing list >>> rspec-users@rubyforge.org >>> http://rubyforge.org/mailman/listinfo/rspec-users >> >> _______________________________________________ >> rspec-users mailing list >> rspec-users@rubyforge.org >> http://rubyforge.org/mailman/listinfo/rspec-users > > _______________________________________________ > rspec-users mailing list > rspec-users@rubyforge.org > http://rubyforge.org/mailman/listinfo/rspec-users > > _______________________________________________ > rspec-users mailing list > rspec-users@rubyforge.org > http://rubyforge.org/mailman/listinfo/rspec-users > > _______________________________________________ > rspec-users mailing list > rspec-users@rubyforge.org > http://rubyforge.org/mailman/listinfo/rspec-users > _______________________________________________ rspec-users mailing list rspec-users@rubyforge.org http://rubyforge.org/mailman/listinfo/rspec-users