Timecop is an extremely useful gem which allows you to simulate the passing of time in RSpec tests. We’re using it to test parts of Citrulu – for example, making sure we don’t send you multiple emails about the same thing.
One of our tests has this shape:
it "should do some stuff!" do # do something Timecop.travel(Time.now + 5) # do something 5 seconds later Timecop.travel(Time.now + 10) # do something 10 seconds later result.should be_awesome end
When running the test I noticed the following line in the output:
15.74 seconds ./spec/lib/my_awesome_spec.rb:118
Over 15 seconds to run the spec?
Clearly the elapsed time is calculated based on timestamps which are affected by the TimeCop travel statements. Adding
Timecop.return() at the end of the script fixes this by resetting the test time to the system time:
0.71269 seconds ./spec/lib/my_awesome_spec.rb:118
Much more plausible 🙂