Oops...not paying attention to which list I was reading, so my answer was Rails-specific! The code still applies though, and still has the advantage of restoring time to normality once you're done. Pete Yandell On 06/09/2006, at 9:21 AM, Pete Yandell wrote: > Jay, > > I don't know about Mocha, but you have to be a bit careful about > replacing Time.now because the test timings depend on it. The way I > do it is as follows. First, I've got a little plugin that includes > this: > > class Time > @@now = nil > > def self.now=(time) > @@now = time > end > > def self.forced_now #:nodoc: > @@now || unforced_now > end > > class << self > alias_method :unforced_now, :now > alias_method :now, :forced_now > end > end > > and then in my test helper: > > def at_time(time) > time = Time.parse(time + ' UTC') unless time.instance_of?(Time) > Time.now = time > begin > yield > ensure > Time.now = nil > end > end > > That lets me do something like this in a test: > > def test_whatever > at_time("Jan 1 2001") do > # Tests go in here. > end > end > > Hope that helps! > > Cheers, > > Pete Yandell > > > On 06/09/2006, at 7:25 AM, Jay Levitt wrote: > >> Mocha seems a great way to stub Time.now for testing expiration >> dates, etc. >> with rspec. I can get it to stub a single time easily: >> >> Time.stubs(:now).returns(Time.at(1)) >> >> but what I'd really like to do is do that multiple times during a >> test: >> >> specify "with an expired cookie should return nil" >> Time.stubs(:now).returns(Time.parse("Jan 1 2001")) >> louie.login >> cookie = louie.remember_me >> >> Time.stubs(:now).returns(Time.parse("Oct 1 2001")) >> louie.login_with_cookie(cookie).should_be_nil >> end >> >> However, only the first stubs call has any effect. I've tried >> stubbing it >> to a FakeTime object: >> >> Time.stubs(:now).returns(FakeTime.now) >> >> but it only looks at the value of FakeTime.now when the stub is >> created. >> Is there a way using Mocha/Stubba to stub a routine and have it call >> another for the return value? I've tried creating procs/lambdas, >> but I >> must be doing something wrong - I get an infinite recursion. >> >> Jay Levitt >> > >