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.