On 13 Jul 2009, at 19:12, David Chelimsky wrote:
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?
Would it be possible to get a handle to the individual stub and tear
that down?
stub = Time.stub!(:now).and_return(foo_time)
# do stuff
stub.remove
Allowing you to do stuff like
with_stubbed_time(foo_time) do
# do stuff
end
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
cheers,
Matt Wynne
http://mattwynne.net
+447974 430184
_______________________________________________
rspec-users mailing list
rspec-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/rspec-users