I’m currently working on an API for Vquence’s VQdata product which allows our customers to use a REST interface to retrieve videos with certain keywords they have previously stored. While writing tests I need to be able to mock out the Time object so that my tests were deterministic relative to time.
I remembered listening to a Ruby5 podcast which mentioned a great little gem called Delorean.
Delorean easily allows you to mock time in your tests. In no time I had hooked it up to cucumber.
In features/support/delorean.rb:
require 'delorean' # Make sure we fix the time up after each scenario After do Delorean.back_to_the_present end
and then in features/step_definitions/delorean_steps.rb
Given /^I time travel to (.+)$/ do |period| Delorean.time_travel_to(period) end
this lets me create steps like
Scenario: Link attributes are correct for yesterday Given I time travel to 2010-02-01 05:00 When I GET the videos keywords feeds page Then I should see "start_time=2010-02-01T00:00:00"
Some other examples you can use with Delorean are
- 2 weeks ago
- tomorrow
- next tuesday 5pm
You can find more examples in the Chronic gem documentation which Delorean uses to achieve this functionality.