So I needed to test “time”…quite literally. I needed to test some time-related validity logic in Rails.
I read that in Rails 4.1, ActiveSupport::Testing::TimeHelpers was added to make it easier for everyone to withstand the test of time. Err, I mean to test time. No disrespect to TimeCop, I know it has its own advantages, but the built-in time helpers for Rails was just enough for my needs.
[pastacode lang=”ruby” message=”” highlight=”” provider=”manual”]
require 'rails_helper' include ActiveSupport::Testing::TimeHelpers describe TimeTravel do it 'allows person to answer after 1 day' do expect(person_can_answer).to be_falsey # About to go to the future travel(1.day) do # While in the future expect(person_can_answer).to be_truthy end # Back to reality expect(person_can_answer).to be_falsey end end
travel method accepts the time/date difference from Time.now. For example, you want to go to next week, you can
travel(1.week) and boom! You’re there.
travel_to accepts stubbed Time or Date. For example,
travel_to Time.new(2004, 9, 20) and voila! You’re back to my 16th birthday.
travel_to are used without a block,
travel_back is needed to go back to the “real” time. Otherwise, it will go back to its original state on its own at the end of the block.
So there. That’s basically how to time travel using ActiveSupport TimeHelpers.
2 comments for “How To Time Travel Using ActiveSupport TimeHelpers”